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
Libérer: 2025-01-07 12:41:45
original
529 Les gens l'ont consulté

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"
        }
    }
}
Copier après la connexion

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; }
}
Copier après la connexion

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);
Copier après la connexion

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
}
Copier après la connexion

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();
        }
    }
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal