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:
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%Tags und Links .net c# json serialization json.net