Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk mengendalikan array yang tidak konsisten di json.net apabila deserializing?
menangani struktur array yang tidak konsisten dalam json.net deserialization
Data JSON Deserializing dengan JSON.NET boleh mengemukakan cabaran apabila harta yang tidak konsisten muncul sebagai nilai tunggal atau array merentasi objek yang berbeza dalam pelbagai JSON. Ini adalah senario yang sama, terutamanya apabila berinteraksi dengan API yang mengembalikan struktur data yang berbeza -beza. Contohnya, harta "kategori" kadang -kadang boleh menjadi rentetan tunggal dan masa lain pelbagai rentetan.
memanfaatkan jsonconverter adat
Penyelesaian yang paling mantap melibatkan membuat adat. Ini membolehkan pengendalian fleksibel terhadap ketidakkonsistenan ini. Proses ini melibatkan langkah -langkah ini: JsonConverter
Definisi Kelas Data: Buat kelas C# untuk mewakili data anda. Gunakan jenis untuk sifat -sifat yang mungkin nilai tunggal atau tatasusunan rentetan. Anotate harta ini dengan atribut List<string>
, menyatakan penukar tersuai anda. [JsonConverter]
Pelaksanaan JsonConverter Generik: Membangunkan generik yang mampu mengendalikan pelbagai jenis objek, termasuk rentetan. JsonConverter
Kaedah: ReadJson
untuk menghuraikan data JSON dan memetakannya dengan betul ke jenis .NET yang sesuai, tanpa mengira sama ada harta JSON adalah satu nilai atau array. ReadJson
(pilihan): Kaedah WriteJson
adalah pilihan. Melaksanakannya jika anda perlu menyatukan data kembali ke JSON, berpotensi mengekalkan format yang tidak konsisten asal.
WriteJson
Contoh ini mempamerkan penukar tersuai dalam tindakan:
Penukar adat ini membolehkan JSON.NET untuk mengendalikan harta yang tidak konsisten
<code class="language-csharp">// Data structure class public class Item { [JsonProperty("email")] public string Email { get; set; } [JsonProperty("timestamp")] public int Timestamp { get; set; } [JsonProperty("event")] public string Event { get; set; } [JsonProperty("category")] [JsonConverter(typeof(SingleOrArrayConverter<string>))] public List<string> Categories { get; set; } = new List<string>(); // Initialize to avoid null } // Generic converter public class SingleOrArrayConverter<T> : JsonConverter { public override bool CanConvert(Type objectType) { // Check if the type is a List<T> or T return objectType == typeof(List<T>) || objectType == typeof(T); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartArray) { var list = new List<T>(); while (reader.Read() && reader.TokenType != JsonToken.EndArray) { list.Add(serializer.Deserialize<T>(reader)); } return list; } else { return serializer.Deserialize<T>(reader); } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value is List<T> list) { writer.WriteStartArray(); foreach (var item in list) { serializer.Serialize(writer, item); } writer.WriteEndArray(); } else { serializer.Serialize(writer, value); } } }</code>yang tidak konsisten, menyediakan proses deserialization yang lebih mantap dan fleksibel. Ingatlah untuk mengendalikan nilai null yang berpotensi dengan sewajarnya dalam kaedah
anda. category
Atas ialah kandungan terperinci Bagaimana untuk mengendalikan array yang tidak konsisten di json.net apabila deserializing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!