Deserialisieren Sie abgeleitete Klassen mithilfe von Json.net, ohne JObject zu verwenden

8

Ich habe einen großen JSON-Datensatz, den ich deserialisieren muss. Ich benutze Json.net's JsonTextReader , um die Daten zu lesen.

Mein Problem ist, dass ich einige abgeleitete Klassen deserialisieren muss, also muss ich in der Lage sein, nach einer bestimmten Eigenschaft zu suchen, die meinen Datentyp definiert. Im folgenden Beispiel wird der Parameter "type" verwendet, um den zu deserialisierenden Objekttyp zu bestimmen.

%Vor%

Meine abgeleiteten Objekte können stark verschachtelt und sehr tief sein. Das Laden des gesamten Datensatzes im Speicher ist nicht erwünscht, da viel Speicher benötigt wird. Sobald ich zum "bigData" -Objekt komme, werde ich die Daten verarbeiten (wie das Array im obigen Beispiel), aber es wird nicht im Speicher gespeichert (es ist zu groß).

Alle Lösungen für mein Problem, die ich bisher gesehen habe, haben JObject verwendet, um die Teilobjekte zu deserialisieren. Ich möchte vermeiden, JObject zu verwenden, da es jedes Objekt in der Hierarchie wiederholt deserialisiert.

Wie kann ich mein Deserialisierungsproblem lösen?

Gibt es eine Möglichkeit, nach dem Parameter "type" zu suchen, und dann zurück zum Anfang des {Charakters des Objekts, um die Verarbeitung zu starten?

    
Matt Houser 15.05.2013, 01:11
quelle

1 Antwort

1

Mir ist es sowieso nicht bewusst, das Laden des Objekts zu übernehmen, um ein Lookahead anzugeben (zumindest nicht in Json.NET), aber Sie könnten die anderen attributbasierten Konfigurationselemente verwenden, um unerwünschte Eigenschaften zu ignorieren :

%Vor%

Alternativ können Sie benutzerdefinierte Erstellung angeben Konverter versuchen:

Zum Beispiel ..

%Vor%     
Stumblor 17.02.2014 09:19
quelle

Tags und Links