Maison >développement back-end >C++ >Comment puis-je désérialiser JSON avec des noms de clés dynamiques en C# ?

Comment puis-je désérialiser JSON avec des noms de clés dynamiques en C# ?

DDD
DDDoriginal
2025-01-07 12:41:45530parcourir

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

Désérialiser des objets enfants avec des noms de clés dynamiques

Introduction

La sérialisation de données JSON avec différents noms de clés pose un défi en matière de désérialisation. Cet article explore une solution utilisant un modèle de propriété dynamique en C#.

Énoncé du problème

Considérant les données JSON ci-dessous, comment pouvons-nous les désérialiser tout en conservant les touches « numériques » dynamiques ?

{
    "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"
        }
    }
}

Solution

Propriété dynamique Modèle

Nous pouvons représenter les différentes clés à l'aide d'un dictionnaire où T est une classe contenant les données de l'objet enfant. Dans ce cas, nous déclarons les classes suivantes :

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; }
}

Désérialisation

Pour désérialiser le JSON à l'aide du modèle de propriété dynamique, nous utilisons le code suivant :

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

Cela crée une instance de RootObject, avec un Dictionary propriété nommée utilisateurs renseignée avec les objets enfants désérialisés.

Accès aux données d'objet

Maintenant, nous pouvons accéder à chaque objet enfant en utilisant leurs clés respectives en parcourant le dictionnaire des utilisateurs :

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

Démo

Le code C# suivant illustre l'intégralité de processus :

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();
        }
    }
}

Sortie

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn