Penyahserikatan JSON bagi sub-objek yang dinamakan secara dinamik dalam C#
Mengendalikan penyahserikatan struktur JSON dengan sub-objek yang dinamakan secara dinamik boleh menjadi mencabar. Pertimbangkan contoh JSON berikut:
<code class="language-json">{ "users": { "parentname": "test", "100034": { "name": "tom", "state": "WA", "id": "cedf-c56f-18a4-4b1" }, "10045": { "name": "steve", "state": "NY", "id": "ebb2-92bf-3062-7774" }, "12345": { "name": "mike", "state": "MA", "id": "fb60-b34f-6dc8-aaf7" } } }</code>
Percubaan untuk menyahsiri menggunakan kod berikut mungkin gagal:
<code class="language-csharp">public class RootObject { public string ParentName { get; set; } public Dictionary<string, User> users { get; set; } } public class User { public string name { get; set; } public string state { get; set; } public string id { get; set; } }</code>
Ini kerana RootObject
nama sifat yang diketahui dalam kelas tidak sepadan dengan nama dinamik objek anak dalam JSON.
Penyelesaiannya ialah menggunakan penukar tersuai untuk mengendalikan nama sifat dinamik dan menyahsirikannya ke dalam kamus objek yang ditaip kuat. Untuk melakukan ini, anda memerlukan:
Buat kelas penukar yang mewarisi daripada JsonConverter
dan berikan logik penyahsirilan dan pensirilan:
<code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
Gunakan atribut [JsonTypedExtensionData]
untuk menandakan atribut dalam model data yang akan memegang kamus objek yang dinamakan secara dinamik:
<code class="language-csharp"> [JsonConverter(typeof(TypedExtensionDataConverter<User>))] class Users { [JsonProperty("parentname")] public string ParentName { get; set; } [JsonTypedExtensionData] public Dictionary<string, User> UserTable { get; set; } }</code>
Model data yang dikemas kini untuk mengendalikan sub-objek dinamik dengan betul:
<code class="language-csharp"> public class RootObject { [JsonProperty("users")] public Users Users { get; set; } }</code>
Dengan menggunakan penukar tersuai, struktur JSON boleh berjaya dinyahsiri menjadi model objek C# ditaip kuat, sekali gus mengekalkan struktur hierarki dan sifat dinamik data asal.
Atas ialah kandungan terperinci Bagaimana untuk Menyahseri JSON dengan Objek Kanak-Kanak Dinamakan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!