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
Patricia ArquetteOriginal
2025-01-13 18:52:45765Durchsuche

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>

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>

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>
  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>
  3. Aktualisiertes Datenmodell zur korrekten Verarbeitung dynamischer Unterobjekte:

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

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!

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