Gibt es einen Weg zu JSON.NET-serialisiert eine Unterklasse von ListT, die auch zusätzliche Eigenschaften hat?

9

Ok, wir verwenden das JSON.NET-Produkt von Newtonsoft, das ich wirklich liebe. Ich habe jedoch eine einfache Klassenstruktur für hierarchische Standorte, die ungefähr so ​​aussehen ...

%Vor%

... und wenn ich sie in JSON serialisiere, funktioniert alles super, außer dass die IsExpanded-Eigenschaft der LocationList-Klasse ausgeschlossen ist. Nur der Inhalt der Liste wird serialisiert.

Nun, hier ist, was ich mir vorstelle, wäre ein gutes Format. Es ist im Wesentlichen dasselbe, als wäre LocationList keine Unterklasse von List<Location> , sondern nur ein reguläres Objekt, das stattdessen eine Eigenschaft namens Items vom Typ List<Location> hat.

%Vor%

Jetzt verstehe ich auch, dass das Produkt von Newtonsoft erweiterbar ist, weil es speziell darüber spricht, wie Sie Ihren eigenen benutzerdefinierten Serializer für bestimmte Datentypen schreiben können, was genau das wäre, was ich hier möchte. Sie haben jedoch keine guten Codebeispiele dafür.

Wenn wir (die SO-Community) dies herausfinden können, sollten wir unter Verwendung des obigen Formats in der Lage sein, jede Unterklasse von List (oder seine Derivate / ähnliche Objekte) zu serialisieren, vorausgesetzt, sie haben nicht bereits eine Eigenschaft namens Items (was IMHO wäre ein schlechtes Design an erster Stelle, da es als Mist verwirrend wäre!) Vielleicht können wir sogar Newtonsoft dazu bringen, so etwas in ihrem Serializer nativ zu rollen!

So, dass ... jemand weiß, wie man den Serializer / Deserializer anpasst, um dieses Objekt anders zu behandeln?

M

    
MarqueIV 02.05.2011, 23:15
quelle

2 Antworten

2

Normalerweise, wenn ich mich mit so etwas befasse, sagt es mir, dass ich einen anderen Ansatz in Betracht ziehen sollte. In diesem Fall würde ich die folgende Struktur des Ansichtsmodells als Alternative empfehlen:

%Vor%     
ataddeini 03.05.2011 01:12
quelle
1

Ok ... also hier ist, was ich mir ausgedacht habe. Ich musste meinen eigenen JsonConverter schreiben. Ich benutze es im Grunde, um ein Inline-JObject zu erstellen, das die Eigenschaften so strukturiert hat, wie ich sie persistieren wollte, dann beharre ich darauf. Ich mache dann das Gegenteil, wenn ich es wieder lese.

Der Nachteil ist jedoch, dass es keine Reflektion oder andere ähnliche Dinge verwendet, so dass dies nur für diesen spezifischen Typ funktioniert, den ich eigenhändig eigenhändig codieren musste (in diesem Fall gibt es nur zwei, also ist das gut !) Und es nutzt auch nicht die DefaultValues-Verarbeitung, die ich manuell emulieren muss, was bedeutet, dass die Attribute grundsätzlich ignoriert werden, wenn ich nicht über sie nachdenke. Trotzdem funktioniert das. Perfekt? Nein, aber hey ... Dinge sind selten!

Natürlich sind Kommentare willkommen und erwünscht!

%Vor%     
MarqueIV 04.05.2011 20:18
quelle