Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich JSON mit Newtonsoft.Json.NET in ein IEnumerable?

Wie deserialisiere ich JSON mit Newtonsoft.Json.NET in ein IEnumerable?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-17 13:41:10556Durchsuche

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

Verwendung von Newtonsoft.Json.NET zum Deserialisieren von JSON in eine IEnumerable-Sammlung

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:

  1. Serialisierung konfigurieren: Erstellen Sie ein JsonSerializerSettings-Objekt und setzen Sie TypeNameHandling auf All.
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
};</code>
  1. Serialisieren mit Typinformationen: Serialisieren Sie Ihr Objekt mit den konfigurierten Einstellungen. Dadurch werden die erforderlichen $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>
  1. Deserialisieren mit Typinformationen: Deserialisieren Sie die JSON-Zeichenfolge wieder in ein 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn