Heim >Backend-Entwicklung >C++ >Wie kann ich JSON mit dynamischen Schlüsselnamen in C# deserialisieren?

Wie kann ich JSON mit dynamischen Schlüsselnamen in C# deserialisieren?

DDD
DDDOriginal
2025-01-07 12:41:45491Durchsuche

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

Deserialisierung von untergeordneten Objekten mit dynamischen Schlüsselnamen

Einführung

Die Serialisierung von JSON-Daten mit unterschiedlichen Schlüsselnamen stellt eine Herausforderung bei der Deserialisierung dar. In diesem Artikel wird eine Lösung unter Verwendung eines dynamischen Eigenschaftsmusters in C# untersucht.

Problemstellung

Wie können wir die JSON-Daten unten deserialisieren und gleichzeitig die dynamischen „numerischen“ Schlüssel beibehalten?

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

Lösung

Dynamische Eigenschaft Muster

Wir können die unterschiedlichen Schlüssel mithilfe eines Dictionary darstellen. Dabei ist T eine Klasse, die die Daten des untergeordneten Objekts enthält. In diesem Fall deklarieren wir die folgenden Klassen:

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

Deserialisierung

Um den JSON mithilfe des dynamischen Eigenschaftsmusters zu deserialisieren, verwenden wir den folgenden Code:

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

Dadurch wird eine Instanz von RootObject mit einem Dictionary erstellt. Eigenschaft namens „Benutzer“, die mit den deserialisierten untergeordneten Objekten gefüllt ist.

Zugriff auf Objektdaten

Jetzt können wir auf jedes untergeordnete Objekt mithilfe seiner jeweiligen Schlüssel zugreifen, indem wir das Benutzerwörterbuch durchlaufen:

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

Demo

Der folgende C#-Code demonstriert das Ganze Prozess:

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

Ausgabe

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

Das obige ist der detaillierte Inhalt vonWie kann ich JSON mit dynamischen Schlüsselnamen in C# deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn