Maison > développement back-end > C++ > Comment désérialiser JSON dans un IEnumerable à l'aide de Newtonsoft.Json.NET ?

Comment désérialiser JSON dans un IEnumerable à l'aide de Newtonsoft.Json.NET ?

Patricia Arquette
Libérer: 2025-01-17 13:41:10
original
630 Les gens l'ont consulté

How to Deserialize JSON into an IEnumerable using Newtonsoft.Json.NET?

Utilisation de Newtonsoft.Json.NET pour désérialiser JSON dans une collection IEnumerable

Défi :

La désérialisation de données JSON complexes dans un IEnumerable<BaseType>BaseType est abstrait présente des difficultés. La norme JsonConvert.DeserializeObject() échoue à cause du type de base abstrait.

Résolution :

La solution consiste à tirer parti de JsonSerializerSettings et de sa TypeNameHandling propriété. La définition de TypeNameHandling sur All garantit que le JSON sérialisé inclut des champs $type, préservant ainsi les informations de type cruciales pour la désérialisation.

Étapes de mise en œuvre :

  1. Configurer la sérialisation : Créez un objet JsonSerializerSettings et définissez TypeNameHandling sur All.
JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
};
Copier après la connexion
  1. Sérialiser avec les informations de type : Sérialisez votre objet à l'aide des paramètres configurés. Cela ajoute les $type champs nécessaires à la chaîne JSON.
string strJson = JsonConvert.SerializeObject(instance, settings);
Copier après la connexion

Le JSON résultant ressemblera à ceci (notez les $type champs) :

{
  "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",
  "$values": [
    {
      "$id": "1",
      "$type": "MyAssembly.ClassA, MyAssembly",
      "Email": "[email'\u00a0protected]"
    },
    {
      "$id": "2",
      "$type": "MyAssembly.ClassB, MyAssembly",
      "Email": "[email'\u00a0protected]"
    }
  ]
}
Copier après la connexion
  1. Désérialiser avec les informations de type : Désérialisez la chaîne JSON en un IEnumerable<BaseType> en utilisant le même objet settings.
IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);
Copier après la connexion

Documentation pertinente :

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!

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