Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyahseri JSON dengan Objek Kanak-Kanak Dinamakan dalam C#?

Bagaimana untuk Menyahseri JSON dengan Objek Kanak-Kanak Dinamakan dalam C#?

Patricia Arquette
Lepaskan: 2025-01-13 18:52:45
asal
763 orang telah melayarinya

How to Deserialize JSON with Dynamically Named Child Objects in C#?

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

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

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:

  1. Buat kelas penukar yang mewarisi daripada JsonConverter dan berikan logik penyahsirilan dan pensirilan:

    <code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
    Salin selepas log masuk
  2. 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>
    Salin selepas log masuk
  3. 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>
    Salin selepas log masuk

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!

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