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
Lepaskan: 2024-12-28 11:24:33
asal
541 orang telah melayarinya

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; }
}
Salin selepas log masuk

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

{ "Id": "someId", "Name": "Ford" }
Salin selepas log masuk

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

{ "Id" : { "Value": "someId" }, "Name": "Ford" }
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan