Deserialisieren Sie json in das C # -Objekt für die Klasse mit dem privaten Standardkonstruktor

7

Ich muss json für folgende Klasse deserialisieren.

%Vor%

Ich kann eine Instanz von Test wie

erstellen %Vor%

in Anbetracht meiner json etwas wie

%Vor%

Wie soll ich ein Objekt der Klasse Test erstellen, da mein Standardkonstruktor privat ist und ich ein Objekt erhalte, bei dem Eigenschaft NULL ist

Ich benutze Newtonsoft Json Parser.

    
Shantanu Gupta 16.06.2014, 12:27
quelle

3 Antworten

23

Sie können Json.Net veranlassen, den privaten Konstruktor aufzurufen, indem Sie ihn mit einem [JsonConstructor] -Attribut markieren:

%Vor%

Beachten Sie, dass der Serializer weiterhin die öffentlichen Setter verwendet, um das Objekt nach dem Aufrufen des Konstruktors aufzufüllen.

BEARBEITEN

Eine weitere mögliche Option ist die Einstellung ConstructorHandling :

%Vor%     
Brian Rogers 17.06.2014 23:23
quelle
2

Es scheint nicht so, als müssten Sie irgendwelche zusätzlichen Schritte unternehmen.

Unter Verwendung von Json.NET v6.0.8 funktioniert das folgende C # -Programm in LINQPad:

%Vor%     
Dave Watts 03.12.2015 12:33
quelle
0

Sie müssen keine Serializer-Einstellung erstellen und ConstructorHandling hier zuweisen. Denken Sie daran, das Attribut [JsonConstructor] für den privaten Konstruktor zu definieren. Ich habe ähnlichen Fall mit abstrakten BaseNode.cs und seiner konkreten ComputerNode.cs Implementierung. Sie können die Klassen erstellen, den folgenden Code kopieren und einfügen und etwas experimentieren.

%Vor%

Für JSon lesen und schreiben hilft der folgende Code -

%Vor%

Alles Gute!

    
JayeshThamke 07.07.2017 16:02
quelle

Tags und Links