Polymorphe JSON-Deserialisierung fehlgeschlagen mit Json.Net

9

Ich versuche, einige JSON in verschiedene Unterklassen zu deserialisieren, indem ich eine benutzerdefinierte JsonConverter

benutze

Ich folgte diesem fast auf den Punkt.

Meine abstrakte Basisklasse:

%Vor%

Und meine abgeleitete JsonConverter :

%Vor%

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?

    
Electric Coffee 18.03.2015, 14:01
quelle

2 Antworten

15

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:

%Vor%     
Mouhong Lin 18.03.2015, 14:39
quelle
0

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%     
Bernd Linde 18.03.2015 14:48
quelle

Tags und Links