Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mensiri dan Menyahsiri Medan Menggunakan System.Text.Json?

Bagaimanakah Saya Boleh Mensiri dan Menyahsiri Medan Menggunakan System.Text.Json?

Susan Sarandon
Susan Sarandonasal
2025-01-14 07:22:45841semak imbas

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

System.Text.Json: Medan Pensirilan dan Penyahserikatan

Dalam versi .NET yang lebih baharu, System.Text.Json.JsonSerializer ialah kaedah pensirilan dan penyahsirilan JSON pilihan. Walau bagaimanapun, ia menimbulkan cabaran untuk kelas yang mengandungi pembolehubah medan, kerana ini tidak disokong secara lalai.

Masalahnya

Dalam versi lama .NET, pembolehubah medan boleh dimasukkan dalam proses bersiri/penyahserialisasi. Dengan pengenalan JsonSerializer, hanya atribut yang disokong, yang membawa kepada isu berikut:

<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>

Penyelesaian

Untuk menyelesaikan masalah ini, dua strategi wujud:

1 .NET 5 dan ke atas

Bermula dalam .NET 5, medan awam boleh disiri dan dinyahsiri melalui:

  • Tetapkan JsonSerializerOptions.IncludeFields kepada true
  • Tambah atribut [JsonInclude] pada medan

Contoh:

<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. Teras BERSIH 3.x

Dalam .NET Core 3.x, siri medan tidak disokong. Sebagai penyelesaian, pertimbangkan untuk menggunakan penukar tersuai untuk mencapai gelagat yang diingini.

Untuk maklumat lanjut dan dokumentasi terperinci, sila rujuk sumber berikut:

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri dan Menyahsiri Medan Menggunakan System.Text.Json?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn