Rufen Sie JsonSerializer in einem JsonConverter rekursiv auf

8

Ich schreibe ein JsonConverter , um einige Konvertierungsaufgaben durchzuführen, die ich beim Lesen / Schreiben ausführen muss. Insbesondere nehme ich das existierende Serialisierungsverhalten und setze einige zusätzliche Eigenschaften auf das Schreiben / Lesen dieser zusätzlichen Eigenschaften beim Lesen.

Innerhalb der JsonConverter möchte ich die übergebene JsonSerializer -Instanz verwenden, um den Großteil der Konvertierungsfunktionalität auszuführen. Aber wenn ich das mache, lande ich in einer rekursiven Schleife, in der der Serializer in meinen Konverter ruft, der in den Serializer aufruft, der den Konverter aufruft usw.

Ich habe Leute gesehen, die Dinge wie JsonConvert.SerializeObject verwenden und alle Konverter von der Serializer-Instanz mit Ausnahme von this übergeben. Das funktioniert jedoch nicht für mich, da es alle anderen Anpassungen umgeht, die ich auf meinem Serializer vorgenommen habe, z. B. benutzerdefinierte Contract Resolver und DateTime handling.

Gibt es einen Weg, den ich kann:

  1. Verwenden Sie die Serializer-Instanz, die an mich übergeben wurde, aber meinen Konverter oder
  2. irgendwie ausschließen
  3. Klonen Sie den mir übergebenen Serializer (ohne manuell einen neuen zu erstellen und ihn Eigenschaft für Eigenschaft zu kopieren) und entfernen Sie meinen Konverter?
David Pfeffer 18.04.2013, 14:33
quelle

2 Antworten

1

Dies ist ein sehr häufiges Problem. Die Verwendung von "JsonConvert.SerializeObject" ist keine schlechte Idee. Ein Trick, der unter bestimmten Umständen (in der Regel Sammlungen) verwendet werden kann, besteht jedoch darin, beim Schreiben und Deserialisieren auf ein einfaches Derivat beim Lesen in das Interface zu konvertieren.

Unten ist ein einfacher Konverter, der Wörterbücher behandelt, die möglicherweise als eine Reihe von KVPs serialisiert wurden, anstatt wie ein Objekt auszusehen (das mein Alter hier zeigt :))

Beachten Sie, dass "WriteJson" in IDictionary & lt; K, V & gt; und "ReadJson" verwendet "DummyDictionary". Sie haben das Richtige, verwenden aber den übergebenen Serializer, ohne Rekursion zu verursachen.

%Vor%     
AndyPook 20.03.2016, 16:38
quelle
-3

Tut mir leid, aber vielleicht bin ich verwirrt. Ich habe diese Methode zum Serialisieren meiner Objekte verwendet:

%Vor%

und ich habe diesen Code verwendet:

%Vor%

Ich hoffe, das war hilfreich.

    
diurvan 27.04.2016 21:38
quelle

Tags und Links