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:
Erstellen Sie eine Konverterklasse, die von JsonConverter
erbt und Deserialisierungs- und Serialisierungslogik bereitstellt:
<code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
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>
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!