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
555 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.
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
};</code>
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.
<code class="language-csharp">string strJson = JsonConvert.SerializeObject(instance, settings);</code>
Copier après la connexion

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

<code class="language-json">{
  "$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]"
    }
  ]
}</code>
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.
<code class="language-csharp">IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);</code>
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!

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