Maison >développement back-end >C++ >Comment désérialiser JSON en un « IEnumerable » à l'aide de Newtonsoft JSON.NET ?
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>
Pour désérialiser JSON en IEnumerable
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>
JSON sérialisé : Sérialise une liste d'objets à l'aide des paramètres configurés.
<code> string strJson = JsonConvert.SerializeObject(instance, settings);</code>
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>
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
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!