Maison >développement back-end >C++ >Comment JSON.NET peut-il désérialiser efficacement JSON avec des clés dynamiques en objets accessibles ?

Comment JSON.NET peut-il désérialiser efficacement JSON avec des clés dynamiques en objets accessibles ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 12:31:41575parcourir

How can JSON.NET efficiently deserialize JSON with dynamic keys into accessible objects?

Désérialisation d'objets à clé dynamique avec JSON.NET

Lorsque vous travaillez avec des données JSON contenant des objets avec des clés dynamiques, la désérialisation de classe conventionnelle peut poser des défis. Cet article explorera comment aborder ce scénario à l'aide de JSON.NET.

Énoncé du problème

Considérez les données JSON suivantes :

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

Comment pouvons-nous accéder directement à chaque objet à partir de ces données, sans avoir besoin d'une analyse manuelle des clés ?

Solution

JSON.NET propose un solution pratique pour désérialiser des objets avec des clés dynamiques à l'aide de son dictionnaire classe. Cette classe nous permet de représenter les objets JSON sous forme de dictionnaires, où les clés sont des chaînes et les valeurs sont des objets de type T.

Implémentation

Pour y parvenir, nous définissons deux classes :

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

Utilisation

Le code suivant montre comment accéder aux objets à partir du fichier désérialisé data:

foreach (string key in root.users.Keys)
{
    Console.WriteLine("key: " + key);
    User user = root.users[key];
    Console.WriteLine("name: " + user.name);
    Console.WriteLine("state: " + user.state);
    Console.WriteLine("id: " + user.id);
    Console.WriteLine();
}

Sortie

Le code produira la sortie suivante :

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