Heim > Backend-Entwicklung > C++ > Wie deserialisiere ich JSON mit dynamisch benannten untergeordneten Objekten in C#?

Wie deserialisiere ich JSON mit dynamisch benannten untergeordneten Objekten in C#?

Patricia Arquette
Freigeben: 2025-01-13 18:52:45
Original
763 Leute haben es durchsucht

How to Deserialize JSON with Dynamically Named Child Objects in C#?

JSON-Deserialisierung von dynamisch benannten Unterobjekten in C#

Der Umgang mit der Deserialisierung von JSON-Strukturen mit dynamisch benannten Unterobjekten kann eine Herausforderung sein. Betrachten Sie das folgende JSON-Beispiel:

<code class="language-json">{
    "users": {
        "parentname": "test",
        "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"
        }
    }
}</code>
Nach dem Login kopieren

Versuche, mit dem folgenden Code zu deserialisieren, schlagen möglicherweise fehl:

<code class="language-csharp">public class RootObject
{
    public string ParentName { get; set; }
    public Dictionary<string, User> users { get; set; }
}

public class User
{
    public string name { get; set; }
    public string state { get; set; }
    public string id { get; set; }
}</code>
Nach dem Login kopieren

Dies liegt daran, dass RootObject die bekannten Eigenschaftsnamen in der Klasse nicht mit den dynamischen Namen der untergeordneten Objekte im JSON übereinstimmen.

Die Lösung besteht darin, einen benutzerdefinierten Konverter zu verwenden, um die dynamischen Eigenschaftsnamen zu verarbeiten und sie in ein Wörterbuch stark typisierter Objekte zu deserialisieren. Dazu benötigen Sie:

  1. Erstellen Sie eine Konverterklasse, die von JsonConverter erbt und Deserialisierungs- und Serialisierungslogik bereitstellt:

    <code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
    Nach dem Login kopieren
  2. Verwenden Sie das Attribut [JsonTypedExtensionData], um das Attribut im Datenmodell zu markieren, das das Wörterbuch dynamisch benannter Objekte enthält:

    <code class="language-csharp"> [JsonConverter(typeof(TypedExtensionDataConverter<User>))]
     class Users
     {
         [JsonProperty("parentname")]
         public string ParentName { get; set; }
    
         [JsonTypedExtensionData]
         public Dictionary<string, User> UserTable { get; set; }
     }</code>
    Nach dem Login kopieren
  3. Aktualisiertes Datenmodell zur korrekten Verarbeitung dynamischer Unterobjekte:

    <code class="language-csharp"> public class RootObject
     {
         [JsonProperty("users")]
         public Users Users { get; set; }
     }</code>
    Nach dem Login kopieren

Durch die Verwendung eines benutzerdefinierten Konverters können JSON-Strukturen erfolgreich in ein stark typisiertes C#-Objektmodell deserialisiert werden, wodurch die hierarchische Struktur und Dynamik der Originaldaten erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich JSON mit dynamisch benannten untergeordneten Objekten in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage