Deserializing-Objekt [], das primitive Typen und einen Klassentyp enthält

8

Ich habe ein Objekt-Array, das Strings und Longs und diese Klasse enthält:

%Vor%

Beim Deserialisieren des JSON-Arrays mit Json.Net erhalte ich jedoch einen anonymen Typ, der Address und Name anstelle eines SimpleMailAddress -Objekts enthält.

Ich möchte kein stark typisiertes Objekt zum Deserialisieren erstellen, da es nicht wiederverwendet wird und ich viele Objekte dafür erstellen müsste. Gibt es eine Möglichkeit, dies mit Json.Net oder einer anderen Bibliothek zu tun?

So serialisiere / deserialiere ich:

%Vor%

Und MailMessageRequest :

%Vor%     
Caleb Jares 25.05.2013, 04:34
quelle

3 Antworten

4

Json enthält kein vererbtes Wissen über Ihre SimpleMailAddress -Klasse. Wenn Sie also die Deserialisierung anweisen, dass Ihre Args-Eigenschaft vom Typ Object ist, tut der Deserializer das Beste, was er kann (indem er einen anonymen Typ erstellt). Es sieht nur Daten, es hat keine Kenntnis, dass Sie ein SimpleMailAddress Objekt wollen.

Json.net hat eine JObject -Klasse. Verwenden Sie das anstelle von Object für Ihren Args-Parameter, wenn der tatsächliche Inhalt von Args den Typ ändern kann.

Dann können Sie bei Bedarf die Daten aus dem JObject -Objekt lesen.

Wenn Sie den tatsächlichen Inhalt von Args nicht interessieren, lassen Sie es als Object und ignorieren Sie es.

Bearbeiten: JSon.Net kann während der Serialisierung Typinformationen einbetten, die während der Deserialisierung verwendet werden können.

Lassen Sie den Parameter Args als Object . Verwenden Sie dann die Option TypeNameHandling von All während der Serialisierung und Deserialisierung.

%Vor%

Sie sollten Ihr Args -Objekt als Ihr gewünschtes SimpleMailAddress -Objekt haben.

    
Matt Houser 25.05.2013, 15:26
quelle
0

Die Datenkontakt-Serialisierer, die in das.net-Framework integriert sind, haben das Konzept bekannter Typen, wo Sie ihnen sagen, welche Typen zu erwarten sind, und sie verwendet diese während der Deserialisierung.

Es gibt einen eingebauten Json Data Contract Serializer, aber ich bin mir nicht sicher, ob er mit Ihren Json Daten kompatibel ist, er muss möglicherweise serialisiert und deserialisiert werden, um mit dieser Methode zu arbeiten.

    
gmn 25.05.2013 17:27
quelle
0

Verstanden. Ich muss diese Einstellungen verwenden:

%Vor%     
Caleb Jares 26.05.2013 17:33
quelle

Tags und Links