Entity framework serialisiert POCO zu JSON
Ich bin mit Ef 4.1 und ich habe eine POCO-Objekt möchte ich serialisieren zu JSON, ich habe gelesen, es gibt ein problem bei der Verwendung von lazy loading, aber ich bin mir nicht sicher, kann mir da einer Message
können, haben eine Sammlung von Message
.
Gibt es eine Möglichkeit, dies zu tun? sirialize diese Art von Objekt in das JSON?
Meine Message
Objekt sieht wie folgt aus:
public class Message
{
[Key]
public int Id { get; set; }
public int? ParentId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? LastModified { get; set; }
public virtual User User { get; set; }
public virtual Message Parent { get; set; }
public virtual ICollection<Message> Children { get; set; }
}
InformationsquelleAutor CD.. | 2011-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist zirkulären Referenzen. Ein einfacher Weg, um dies zu vermeiden, ist die Verwendung Json.Net http://james.newtonking.com/projects/json-net.aspx anstelle der Standard-MVC-json-serializer. Die neueste version von Json.Net serialisieren von Objekten mit Zirkelverweisen aus der box. http://james.newtonking.com/projects/json/help/PreserveObjectReferences.html für mehr info auf das problem
ReferenceLoopHandling.Ignore
und eine benutzerdefinierteContractResolver
war der trick 🙂InformationsquelleAutor Bobby Richard
Eifrig laden Sie es mit Include(). Beispiel linq:
Sagen, EF zum laden der Benutzer-navigation-Eigenschaft sofort anstelle von lazy loading ist es, und das Serialisierungsprogramm sollten kein problem mit es dann.
InformationsquelleAutor Tridus
Wie wäre es damit:
[Serializable]
was bin ich? Die
virtual
Eigenschaft serialisiert nur gut für die Sammlung und die einzelnen Eigenschaften: i.imgur.com/9mkW3.pngIn EF irgendeine virtual ICollection wird lazy geladen..
InformationsquelleAutor p.campbell
Gut, laß uns teilen.
¿Warum geschieht dies?
Weil Sie virtuelle Eigenschaften. Wenn Sie mit EF die Sie tatsächlich benötigen, wenn Sie mit Lazy loading. Sie können einstellen, Ihre EF nicht dies tun, indem Sie dieses Beispiel:
wo ist der Kontext Ihrer ObjectContext oder DbContext... dieses vorausgesetzt, Sie sind mit EF. Aber für die meisten Szenarien ist dies keine gute Herangehensweise.
Mögliche Lösung
Wie ich immer sage: "es gibt keine gute oder schlechte Lösungen, nur verschiedene Wege, und es hängt vom Kontext ab", sagen, dass Sie können erstellen, dynamische Objekte.
In Fall, dass Sie nur serialisieren ein einzigartiges Objekt, können Sie so etwas tun
In Fall, dass Sie eine Liste haben, gut, Sie können dies tun:
Habe ich versucht, diese so allgemein wie ich kann. Ich hoffe dies kann jemandem helfen!!
Beste Grüße und einen schönen Tag! 🙂
InformationsquelleAutor Gabriel Andrés Brancolini