System.Text.Json: Serialisierungs- und Deserialisierungsfelder
In neueren .NET-Versionen ist System.Text.Json.JsonSerializer
die bevorzugte JSON-Serialisierungs- und Deserialisierungsmethode. Für Klassen, die Feldvariablen enthalten, stellt dies jedoch eine Herausforderung dar, da diese standardmäßig nicht unterstützt werden.
Das Problem
In älteren Versionen von .NET konnten Feldvariablen in den Serialisierungs-/Deserialisierungsprozess einbezogen werden. Mit der Einführung von JsonSerializer
werden nur Attribute unterstützt, was zu den folgenden Problemen führt:
<code class="language-csharp">using System.Text.Json; public class Car { public int Year { get; set; } // 正确序列化 public string Model; // 未正确序列化(字段变量) } static void Problem() { Car car = new Car() { Model = "Fit", Year = 2008, }; string json = JsonSerializer.Serialize(car); // {"Year":2008} Car carDeserialized = JsonSerializer.Deserialize<Car>(json); Console.WriteLine(carDeserialized.Model); // null! }</code>
Lösung
Um dieses Problem zu lösen, gibt es zwei Strategien:
1. .NET 5 und höher
Ab .NET 5 können öffentliche Felder serialisiert und deserialisiert werden über:
JsonSerializerOptions.IncludeFields
auf true
[JsonInclude]
Attribute zu Feldern hinzuBeispiel:
<code class="language-csharp">using System.Text.Json; using System.Text.Json.Serialization; static void Main() { var car = new Car { Model = "Fit", Year = 2008 }; // 启用支持 var options = new JsonSerializerOptions { IncludeFields = true }; // 传递“options” var json = JsonSerializer.Serialize(car, options); // 传递“options” var carDeserialized = JsonSerializer.Deserialize<Car>(json, options); Console.WriteLine(carDeserialized.Model); // 输出 "Fit" } public class Car { public int Year { get; set; } [JsonInclude] public string Model; }</code>
2. .NET Core 3.x
In .NET Core 3.x wird die Feldserialisierung nicht unterstützt. Um dieses Problem zu umgehen, sollten Sie die Verwendung eines benutzerdefinierten Konverters in Betracht ziehen, um das gewünschte Verhalten zu erzielen.
Weitere Informationen und eine detaillierte Dokumentation finden Sie in den folgenden Ressourcen:
Das obige ist der detaillierte Inhalt vonWie kann ich Felder mit System.Text.Json serialisieren und deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!