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

Comment désérialiser JSON en un « IEnumerable » à l'aide de Newtonsoft JSON.NET ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-17 13:48:11921parcourir

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

Utilisez Newtonsoft JSON.NET pour désérialiser JSON en IEnumerable

Supposons que JSON représente une liste d'objets avec des types polymorphes :

<code>[
  {
    "$id": "1",
    "$type": "MyAssembly.ClassA, MyAssembly",
    "Email": "[email protected]"
  },
  {
    "$id": "2",
    "$type": "MyAssembly.ClassB, MyAssembly",
    "Email": "[email protected]"
  }
]</code>

et classes de base abstraites et dérivées :

<code>public abstract class BaseClass
{
    public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}</code>

Désérialiser JSON en IEnumerable

Pour désérialiser JSON en IEnumerable, suivez ces étapes :

  1. Activer TypeNameHandling : Définissez TypeNameHandling de JsonSerializerSettings sur All pour inclure les informations de type dans le JSON désérialisé.

    <code> JsonSerializerSettings settings = new JsonSerializerSettings
     {
         TypeNameHandling = TypeNameHandling.All
     };</code>
  2. JSON sérialisé : Sérialise une liste d'objets à l'aide des paramètres configurés.

    <code> string strJson = JsonConvert.SerializeObject(instance, settings);</code>
  3. JSON modifié : Le JSON sérialisé contiendra des informations $type, et le JSON généré ressemblera à ceci :

    <code> {
       "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",
       "$values": [
         {
           "$id": "1",
           "$type": "MyAssembly.ClassA, MyAssembly",
           "Email": "[email protected]"
         },
         {
           "$id": "2",
           "$type": "MyAssembly.ClassB, MyAssembly",
           "Email": "[email protected]"
         }
       ]
     }</code>
  4. Désérialiser JSON : Désérialisez le JSON modifié vers la classe de base à l'aide des paramètres avec TypeNameHandling activé.

    <code> IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>

En suivant ces étapes, vous pouvez réussir à désérialiser JSON en IEnumerable, y compris les objets avec des types polymorphes.

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:
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