Wie in einem JSON von einer Entität serialisieren?

8

Ich versuche eine Entity (Entity Framework 6) in json zu serialisieren. Ich sorge dafür, dass der Eintrag im Speicher vor der Serialisierung über die AsNoTracking () -Methode, aber ich bekomme einen Fehler, wie es einen Wert aus einer anderen Tabelle erhalten, die im Eintrag verwiesen wird.

%Vor%

Code:

%Vor%

Ich möchte nur eine Zeichenfolge der serialisierten Entität zurückgeben. Ich mache mir keine Sorgen um andere Objekte, nur um die Entitäten der Standorte.

Als ich versuchte, die Verbindung zu disponieren und dann json serialisieren, erhielt ich den Fehler: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

Ich möchte nur meine Liste serialisieren, ich möchte keine fremden Abhängigkeiten zurückgeben / serialisieren.

    
Sean B 04.11.2015, 12:50
quelle

3 Antworten

5

Dies ist ein EF 's Problem mit dem dynamischen Proxy, das Sie deaktivieren müssen, damit Ihr Code funktioniert

in Ihrer Klasse, die von DbContext

erben %Vor%

Hauptsächlich passiert, dass Ihr JsonConvert versucht, ein Objekt wie dieses System.Data.Entity.DynamicProxies.Location_5E43C6C196972BF0754973E48C9C941092D86818CD94005E9A759B70BF6E48E6

zu serialisieren

aufgrund des Proxys, der nicht gefunden werden kann, weil er dynamisch erstellt wird

    
BRAHIM Kamel 04.11.2015, 12:58
quelle
1

Sie müssen nicht die Methode AsNoTracking aufrufen, um die benötigten Entitäten in den Speicher zu laden. Die ToList Methode wird diesen Job erledigen.

Nun zu Ihrem Problem, liegt daran, dass der JSON-Serializer versucht, auf jede Eigenschaft in einer Location -Instanz zuzugreifen, und Sie können die gesamte Datenbank abfragen, nur weil das verzögerte Laden aktiviert ist. Also, Sie haben zwei Möglichkeiten:

  1. Lazy Loading deaktivieren (wie @BRAHIMKamel empfohlen)
  2. Verwenden Sie JsonIgnore über die Navigationseigenschaften, die Sie nicht laden möchten .

Persönlich bevorzuge ich die erste, und wenn ich eine Entität mit einer bestimmten verwandten Entität laden muss, verwende ich eifrig laden , um es als Teil der Abfrage zu laden:

%Vor%     
octavioccl 04.11.2015 13:11
quelle
1

Wenn Ihr Objektgraph nicht zu kompliziert ist, könnte ein anderer Ansatz darin bestehen, eine einfache POCO-Klasse zu erstellen, aus der Ihr Location zugeordnet wird. Sagen wir LocationModel . Dies könnte manuell oder zum Beispiel mit AutoMapper abgebildet werden.

    
Hoppus Hoppard 04.11.2015 13:03
quelle