Heim > Backend-Entwicklung > C++ > Wie kann ich Felder mit System.Text.Json serialisieren und deserialisieren?

Wie kann ich Felder mit System.Text.Json serialisieren und deserialisieren?

Susan Sarandon
Freigeben: 2025-01-14 07:22:45
Original
841 Leute haben es durchsucht

How Can I Serialize and Deserialize Fields Using System.Text.Json?

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>
Nach dem Login kopieren

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:

  • Setzen Sie JsonSerializerOptions.IncludeFields auf true
  • Fügen Sie [JsonInclude] Attribute zu Feldern hinzu

Beispiel:

<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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage