2017-10-06 9 views
0

Ich habe eine Klasse ‚Entity‘Nicht als Serializable Fehler markiert

[Serializable] 
public class Entity 
{ 
    public Guid Id { get; set; } 
    public IEnumerable<Entity> ChildEntity { get; set; } 
} 

Ich würde feststellen, dass es Eigentum ChildEntity hat, die eine Liste der gleichen Klasse Entity ist.

Frage1. Muss ich diese Liste explizit serialisieren? Oder Serializable Attribut für die Klasse wird das für mich arbeiten.

Wenn ich nun versuche, diese Klasse mit dem Binär-Serializer zu serialisieren, erhalte ich die Ausnahme, dass diese Klasse nicht als serialisierbar markiert ist.

Ich denke, die Ausnahme tritt auf, wenn es versucht, ChildEntities zu serialisieren.

Hier ist mein Code für die Serialisierung.

Ich habe auch eine Klasse, aus der die Liste der Entity Class wird gefüllt.

Ich führe Rekursion, um die Liste der Entity-Klasse basierend auf Parent Child Relationship zu erstellen.

public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity) 
{ 
    //recursivey builds List if Entity class 
} 

Ausnahmemeldung:

Typ ‚System.Linq.Enumerable + WhereSelectListIterator`2 [[Common.Models.AllEntity, Common, Version = 1.0.0.0, Culture = neutral , Token = null], [Common.Models.Entity, Allgemein, Version = 1.0.0.0, Culture = neutral, Token = null] 'in Assembly' System.Core, Version = 4.0.0.0, Kultur = neutral, Token = null 'ist nicht als serialisierbar gekennzeichnet

+0

Was ist die vollständige 'ToString()' Ausgabe der Ausnahme einschließlich der Nachricht, Quelle, Ausnahmetyp und innere Ausnahme? Die vollständige Ausnahmebedingungsnachricht sollte mehr erklären. – dbc

+0

Macht es Sinn? –

+0

Können Sie bitte Ihren vollständigen Code posten, um zu sehen. –

Antwort

0

Wie die Ausnahme angezeigt, Ihr Problem ist, dass in mindestens einem Entity Beispiel die Eigenschaft IEnumerable<Entity> ChildEntity tatsächlich bezieht sich nicht auf eine List<ChildEntity>, um es in die unevaluierten Ergebnis eines .Where() bezieht. LINQ-Abfrage

Materialisieren Sie es mit ToList() vor der Lagerung.

0

Ich habe mit unten Code überprüft funktioniert gut.

Entity ea = new Entity(); 
ea.Id = Guid.NewGuid(); 
var li = new List<Entity>(); 
li.Add(new Entity { Id = Guid.NewGuid() }); 
ea.ChildEntity = li; 
DeepClone<Entity>(ea); 

Sie müssen nur Klasse als [Serializable] markieren.

+0

Bitte siehe aktualisierten Beitrag. – siddharth

Verwandte Themen