Ich versuche, einige JSON in verschiedene Unterklassen zu deserialisieren, indem ich eine benutzerdefinierte JsonConverter
Ich folgte diesem fast auf den Punkt.
Meine abstrakte Basisklasse:
%Vor% Und meine abgeleitete JsonConverter
:
SourceType
ist nur eine statische Klasse, die einige String-Konstanten enthält.
Die JSON-Datei wird wie folgt deserialisiert:
%Vor%Nun, mein Problem ist, dass ich immer den folgenden Fehler erhalte, wenn ich den Code ausführe:
%Vor%Die betreffende JSON-Datei sieht folgendermaßen aus:
%Vor%Es scheint mir, dass es Probleme mit der Deserialisierung der verschachtelten Objekte hat, wie komme ich dazu?
Zuerst wird SourceType
für den Menüpunkt "Submenus Test" in Ihrem json vergessen.
Zweitens sollten Sie ToObject
nicht einfach wegen der Eigenschaft Submenus
verwenden, die rekursiv behandelt werden sollte.
Das folgende ReadJson
funktioniert:
Der Grund für den Fehler liegt darin, dass Ihre MenuItem
-Klasse als abstract
markiert ist. Ich vermute, dass Sie dies getan haben, um die Implementierung der DisplayContents()
-Methode in vererbten Klassen zu erzwingen.
Eine andere Möglichkeit, den Json zu lesen, was Mouhong Lin vorgeschlagen hat, besteht darin, eine Basis% zu erstellen. co_de% für Ihre MenuItem-Struktur, lassen Sie Ihre Interface
-Klasse die Schnittstelle mit einer Basisversion der MenuItem
-Methode implementieren, markieren Sie sie als virtuell und überschreiben Sie sie dann in Ihren geerbten Unterklassen.
Dieser Ansatz stellt sicher, dass beim Aufruf von DisplayContents()
immer etwas angezeigt wird, und entfernen Sie den Fehler, den Sie erhalten.
Eine sehr grobe und vereinfachte Version der Klassen und der Schnittstelle:
%Vor%Tags und Links c# json serialization json.net