Maison > développement back-end > C++ > Comment désérialiser JSON avec des objets enfants nommés dynamiquement en C# ?

Comment désérialiser JSON avec des objets enfants nommés dynamiquement en C# ?

Patricia Arquette
Libérer: 2025-01-13 18:52:45
original
763 Les gens l'ont consulté

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

Désérialisation JSON de sous-objets nommés dynamiquement en C#

La gestion de la désérialisation des structures JSON avec des sous-objets nommés dynamiquement peut s'avérer difficile. Prenons l'exemple JSON suivant :

<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>
Copier après la connexion

Les tentatives de désérialisation à l'aide du code suivant peuvent échouer :

<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>
Copier après la connexion

Cela est dû au fait que RootObject les noms de propriétés connus dans la classe ne correspondent pas aux noms dynamiques des objets enfants dans le JSON.

La solution consiste à utiliser un convertisseur personnalisé pour gérer les noms de propriétés dynamiques et les désérialiser dans un dictionnaire d'objets fortement typés. Pour ce faire, il vous faut :

  1. Créez une classe de convertisseur qui hérite de JsonConverter et fournissez une logique de désérialisation et de sérialisation :

    <code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
    Copier après la connexion
  2. Utilisez l'attribut [JsonTypedExtensionData] pour marquer l'attribut dans le modèle de données qui contiendra le dictionnaire des objets nommés dynamiquement :

    <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>
    Copier après la connexion
  3. Modèle de données mis à jour pour gérer correctement les sous-objets dynamiques :

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

En utilisant un convertisseur personnalisé, les structures JSON peuvent être désérialisées avec succès en un modèle objet C# fortement typé, préservant ainsi la structure hiérarchique et la nature dynamique des données d'origine.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal