Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich JSON mit Newtonsoft JSON.NET in ein „IEnumerable'?
Angenommen, JSON stellt eine Liste von Objekten mit polymorphen Typen dar:
<code>[ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email protected]" }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email protected]" } ]</code>
und abstrakte Basis- und abgeleitete Klassen:
<code>public abstract class BaseClass { public string Email; } public class ClassA : BaseClass { } public class ClassB : BaseClass { }</code>
Um JSON in die IEnumerable
TypeNameHandling aktivieren: Legen Sie TypeNameHandling von JsonSerializerSettings auf „All“ fest, um Typinformationen in das deserialisierte JSON aufzunehmen.
<code> JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };</code>
Serialisiertes JSON: Serialisiert eine Liste von Objekten mithilfe konfigurierter Einstellungen.
<code> string strJson = JsonConvert.SerializeObject(instance, settings);</code>
Geänderter JSON: Der serialisierte JSON enthält $type-Informationen und der generierte JSON sieht folgendermaßen aus:
<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>
JSON deserialisieren: Deserialisieren Sie geändertes JSON mithilfe von Einstellungen mit aktiviertem TypeNameHandling in die Basisklasse.
<code> IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>
Indem Sie diese Schritte befolgen, können Sie JSON erfolgreich in IEnumerable
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich JSON mit Newtonsoft JSON.NET in ein „IEnumerable'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!