Der Standardkonstruktor von JSON.NET kann die JSON -Daten nahtlos in das Objekt sequenzieren. Wenn Ihre Klasse jedoch wieder eingestellt werden muss, kann der Standardkonstruktor den Verarbeitungsprozess behindern. Dieses Problem tritt auf, wenn JSON -Daten mit den Parametern des Schwerlastkonstruktors übereinstimmen, aber ein Standardkonstruktor vorliegt.
Lösung: Decken Sie das Standardverhalten
ab Um zu verhindern, dass JSON.NET den Standardkonstruktor verwendet, gibt es zwei Möglichkeiten:
<.> 1. Verwenden Sie [JsonConstructor] -Funktionen:Mit
JSON.NET können Sie den bevorzugten Nachrüstungskonstruktor mit der Funktion [JsonConstructor] angeben. Durch die Verwendung des für diese Funktion erforderlichen Konstruktors können Sie JSON.net zur Verwendung zwingen, auch wenn der Standardkonstruktor definiert ist. Beachten Sie, dass der Konstruktorparameter mit dem JSON -Objektattribut übereinstimmen sollte (ignorieren Sie den Kleinbuchstaben). <.> 2. Erstellen Sie einen benutzerdefinierten JsonConverter:
oder, wenn Sie die Klasse nicht ändern können, können Sie einen benutzerdefinierten JSONCONVERRER erstellen, um den Verarbeitungsprozess zu steuern. Die Readjson -Methode des Konverters kann angepasst werden, um das Konstruktor -Konstruktor -Objekt für nicht -defekte Konstruktors zu verwenden und alle anderen Attribute nach JSON -Daten zu füllen.
Beispiel:
unter Berücksichtigung der folgenden Klassen mit konstruktiven Funktionen:
Um die Feature -Methode [JsonConstructor] zu verwenden, verwenden Sie bitte den bevorzugten Konstruktor dieser Funktionsdekoration, wie unten gezeigt:
Andererseits können Sie für die benutzerdefinierte JSONCONVERRER -Methode den unten gezeigten Konverter definieren:
<code class="language-csharp">public class Result { public Result() { } [JsonConstructor] public Result(int? code, string format, Dictionary<string, string> details = null) { Code = code ?? ERROR_CODE; Format = format; if (details == null) Details = new Dictionary<string, string>(); else Details = details; } }</code>
In der Readjson -Methode dieses Konverters können Sie den Nichtdefault -Konstruktor verwenden, um das Ergebnisobjekt zu instanziieren und alle anderen Attribute nach JSON -Daten zu füllen.
<code class="language-csharp">[JsonConstructor] public Result(int? code, string format, Dictionary<string, string> details = null) { ... }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich JSON -Daten ohne Standardkonstruktor in eine C# -Klasse deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!