Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh menyahsiri JSON dengan nama kunci dinamik dalam C#?

Bagaimanakah saya boleh menyahsiri JSON dengan nama kunci dinamik dalam C#?

DDD
Lepaskan: 2025-01-07 12:41:45
asal
529 orang telah melayarinya

How can I deserialize JSON with dynamic key names in C#?

Menyahsiri Objek Kanak-Kanak dengan Nama Kunci Dinamik

Pengenalan

Mensirikan data JSON dengan nama kunci yang berbeza-beza menimbulkan cabaran dalam penyahsirilan. Artikel ini meneroka penyelesaian menggunakan corak sifat dinamik dalam C#.

Pernyataan Masalah

Memandangkan data JSON di bawah, bagaimanakah kita boleh menyahsirikannya sambil mengekalkan kekunci "numerik" dinamik?

{
    "users" : {
        "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"
        }
    }
}
Salin selepas log masuk

Penyelesaian

Harta Dinamik Corak

Kita boleh mewakili kekunci yang berbeza-beza menggunakan Kamus di mana T ialah kelas yang mengandungi data objek kanak-kanak. Dalam kes ini, kami mengisytiharkan kelas berikut:

class RootObject
{
    public Dictionary<string, User> users { get; set; }
}

class User
{
    public string name { get; set; }
    public string state { get; set; }
    public string id { get; set; }
}
Salin selepas log masuk

Deserialisasi

Untuk menyahsiri JSON menggunakan corak sifat dinamik, kami menggunakan kod berikut:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
Salin selepas log masuk

Ini mencipta contoh RootObject, dengan Kamus harta yang dinamakan pengguna diisikan dengan objek kanak-kanak yang dinyahsiri.

Mengakses Data Objek

Kini, kita boleh mengakses setiap objek kanak-kanak menggunakan kekunci masing-masing dengan mengulangi kamus pengguna:

foreach (string key in root.users.Keys)
{
    User user = root.users[key];
    // Access user properties using user.name, user.state, user.id
}
Salin selepas log masuk

Demo

Kod C# berikut menunjukkan keseluruhan proses:

class Program
{
    static void Main(string[] args)
    {
        string json = @"
        {
            ""users"": {
                ""10045"": {
                    ""name"": ""steve"",
                    ""state"": ""NY"",
                    ""id"": ""ebb2-92bf-3062-7774""
                },
                ""12345"": {
                    ""name"": ""mike"",
                    ""state"": ""MA"",
                    ""id"": ""fb60-b34f-6dc8-aaf7""
                },
                ""100034"": {
                    ""name"": ""tom"",
                    ""state"": ""WA"",
                    ""id"": ""cedf-c56f-18a4-4b1""
                }
            }
        }";

        RootObject root = JsonConvert.DeserializeObject<RootObject>(json);

        // Iterate over users and print their data
        foreach (string key in root.users.Keys)
        {
            User user = root.users[key];
            Console.WriteLine("key: " + key);
            Console.WriteLine("name: " + user.name);
            Console.WriteLine("state: " + user.state);
            Console.WriteLine("id: " + user.id);
            Console.WriteLine();
        }
    }
}
Salin selepas log masuk

Output

key: 10045
name: steve
state: NY
id: ebb2-92bf-3062-7774

key: 12345
name: mike
state: MA
id: fb60-b34f-6dc8-aaf7

key: 100034
name: tom
state: WA
id: cedf-c56f-18a4-4b1
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyahsiri JSON dengan nama kunci dinamik 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan