json.net: Deserialisierungsobjekte mit Nicht-Default-Konstruktoren
json.net verwendet typischerweise den Standardkonstruktor zur Deserialisierung. Wenn Ihre Klasse jedoch über einen Nicht-Default-Konstruktor verfügt, der aus anderen Gründen erforderlich ist, können Sie JSON.NET weiterhin verwenden, um mit Ihrem bevorzugten Konstruktor zu Deserialize zu deserialisieren.
Verwenden Sie das Attribut [JsonConstructor]
Die einfachste Lösung besteht darin, Ihren gewünschten Konstruktor mit dem [JsonConstructor]
-attribut zu markieren. Dies fordert JSON.NET an, diesen Konstruktor während der Deserialisierung zu verwenden. Stellen Sie sicher, dass die Namen der Konstruktorparameternamen den JSON-Eigenschaftsnamen (Fall-unempfindlich) übereinstimmen.
<code class="language-csharp">[JsonConstructor] public Result(int? code, string format, Dictionary<string, string> details = null) { // ... }</code>
Erstellen eines benutzerdefinierten JsonConverter
Wenn Sie den Quellcode nicht direkt ändern können, können Sie eine benutzerdefinierte JsonConverter
.
<code class="language-csharp">class ResultConverter : JsonConverter { // ... implementation details ... }</code>
Fügen Sie dann den Konverter zu Ihren Serializer -Einstellungen hinzu:
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new ResultConverter()); Result result = JsonConvert.DeserializeObject<Result>(jsonText, settings);</code>
Dieser Ansatz bietet mehr Kontrolle über den Deserialisierungsprozess, ohne die ursprüngliche Klassendefinition zu ändern. Das JsonConverter
ermöglicht eine flexible Objekterstellung und Eigenschaftspopulation.
Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Objekte mit Nicht-Default-Konstruktoren mit json.net deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!