Verwendung von Newtonsoft.Json.NET zum Deserialisieren von JSON in eine IEnumerable
Herausforderung:
Das Deserialisieren komplexer JSON-Daten in ein IEnumerable<BaseType>
, bei dem BaseType
abstrakt ist, bereitet Schwierigkeiten. Standard JsonConvert.DeserializeObject
schlägt aufgrund des abstrakten Basistyps fehl.
Auflösung:
Die Lösung besteht darin, JsonSerializerSettings
und seine TypeNameHandling
-Eigenschaft zu nutzen. Durch Festlegen von TypeNameHandling
auf All
wird sichergestellt, dass der serialisierte JSON $type
-Felder enthält, wodurch die für die Deserialisierung wichtigen Typinformationen erhalten bleiben.
Implementierungsschritte:
JsonSerializerSettings
-Objekt und setzen Sie TypeNameHandling
auf All
.<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };</code>
$type
-Felder zur JSON-Zeichenfolge hinzugefügt.<code class="language-csharp">string strJson = JsonConvert.SerializeObject(instance, settings);</code>
Der resultierende JSON wird wie folgt aussehen (beachten Sie die $type
-Felder):
<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>
IEnumerable<BaseType>
unter Verwendung desselben settings
-Objekts.<code class="language-csharp">IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);</code>
Relevante Dokumentation:
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!