Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mensiri/Menyahsiri Sifat JSON sebagai Nilai Daripada Objek dalam C#?

Bagaimana untuk Mensiri/Menyahsiri Sifat JSON sebagai Nilai Daripada Objek dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-28 11:24:33554semak imbas

How to Serialize/Deserialize JSON Properties as Values Instead of Objects in C#?

Mensiri/Menyahseri Sifat JSON sebagai Nilai Daripada Objek: Panduan Mendalam

Dalam banyak aplikasi, data diwakili dalam format JSON untuk penyimpanan dan penghantaran yang cekap. Walau bagaimanapun, kadangkala perwakilan JSON lalai mungkin tidak sejajar dengan format yang kami kehendaki. Ini boleh berlaku terutamanya apabila berurusan dengan jenis data tersuai. Dalam artikel ini, kami akan meneroka isu yang dihadapi oleh pengaturcara semasa mensiri/menyahserialisasikan kelas dengan sifat jenis data tersuai dan cara mengatasinya.

Pernyataan Masalah

Pertimbangkan kod berikut:

class Car
{
    public StringId Id { get; set; }
    public string Name { get; set; }
}

class StringId
{
    public string Value { get; set; }
}

Apabila cuba mensiri objek kelas Kereta, kami mungkin menjangkakan perkara berikut Perwakilan JSON:

{ "Id": "someId", "Name": "Ford" }

Walau bagaimanapun, kelakuan lalai dalam JSON.NET menghasilkan perwakilan yang berbeza:

{ "Id" : { "Value": "someId" }, "Name": "Ford" }

Ini kerana sifat StringId disiri sebagai objek dan bukannya nilai mudah.

Penyelesaian 1: Menggunakan a TypeConverter

Salah satu cara untuk menyelesaikan isu ini ialah dengan mencipta TypeConverter untuk kelas StringId. JSON.NET akan secara automatik mengesan dan menggunakan penukar ini apabila mensiri/menyahserialisasi objek. Begini cara untuk melaksanakan TypeConverter untuk StringId:

[TypeConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : TypeConverter
{
    // Implementation of CanConvertFrom, CanConvertTo, ConvertFrom, and ConvertTo methods
}

TypeConverter ini membenarkan JSON.NET menukar objek StringId ke dan daripada rentetan.

Penyelesaian 2: Menggunakan JsonConverter Tersuai

Pendekatan alternatif ialah menggunakan adat JsonConverter. Ini memberikan lebih kawalan ke atas proses bersiri/deserialisasi. Begini cara untuk melaksanakan JsonConverter tersuai untuk StringId:

[JsonConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : JsonConverter
{
    // Implementation of CanConvert, ReadJson, and WriteJson methods
}

JsonConverter ini membolehkan kami menentukan dengan tepat cara objek StringId harus diwakili dalam JSON.

Pertimbangan Tambahan

Adalah penting untuk ambil perhatian bahawa penukar jenis adalah hanya disokong dalam Teras .NET untuk JSON.NET 10.0.1 dan lebih baru. Untuk versi yang lebih lama, JsonConverter tersuai hendaklah digunakan sebaliknya.

Atas ialah kandungan terperinci Bagaimana untuk Mensiri/Menyahsiri Sifat JSON sebagai Nilai Daripada Objek dalam C#?. 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