Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyahserialisasi Tatasusunan dan Objek JSON Campuran dalam C# Menggunakan JsonConverter Tersuai?
C# Penyahserialisasian Tatasusunan dan Objek JSON Campuran
Artikel ini menangani cabaran untuk menyahsiri data JSON daripada sumber seperti Facebook, yang mana struktur data mungkin muncul secara tidak konsisten sama ada sebagai tatasusunan atau objek. Penyahserikatan JSON.NET standard selalunya gagal dalam situasi sedemikian.
Penyelesaian: Penukar Json Tersuai
Penyelesaian melibatkan mencipta penukar JSON.NET tersuai. Penukar ini mengendalikan kedua-dua format tatasusunan dan objek, memastikan penyahserikatan yang konsisten. (Lihat "Menggunakan Penukar Json Tersuai untuk membetulkan hasil JSON yang buruk" untuk penjelasan yang lebih terperinci.)
Melaksanakan Penukar Tersuai
Inti penyelesaian ialah penukar tersuai yang mengembalikan senarai jenis sasaran, walaupun jika input JSON ialah objek tunggal.
Atribut Harta:
Harta dalam kelas C# anda yang akan menyimpan data desiri perlu dianotasi dengan penukar tersuai:
<code class="language-csharp">[JsonConverter(typeof(SingleValueArrayConverter<OrderItem>))] public List<OrderItem> Items;</code>
Kelas SingleValueArrayConverter
:
Penukar tersuai ini menyemak jenis token JSON dan menyahsiri dengan sewajarnya:
<code class="language-csharp">public class SingleValueArrayConverter<T> : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); // Not implemented for this example } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartObject) { T instance = (T)serializer.Deserialize(reader, typeof(T)); return new List<T> { instance }; } else if (reader.TokenType == JsonToken.StartArray) { return serializer.Deserialize(reader, objectType); } return null; // Handle other token types as needed } public override bool CanConvert(Type objectType) { return true; // Or add specific type checking here for robustness } }</code>
Penukar ini memastikan sama ada input JSON ialah objek tunggal atau tatasusunan, sifat C# yang terhasil akan sentiasa mengandungi List<T>
. Ambil perhatian bahawa pengendalian ralat (cth., untuk jenis token yang tidak dijangka) mungkin perlu ditambah untuk kegunaan pengeluaran. Pendekatan ini amat berguna apabila senarai adalah struktur data yang sesuai untuk kedua-dua objek tunggal dan input JSON tatasusunan. Penyelesaian alternatif mungkin diperlukan untuk senario di mana senarai tidak sesuai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahserialisasi Tatasusunan dan Objek JSON Campuran dalam C# Menggunakan JsonConverter Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!