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!