Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich verschachteltes JSON in ein verschachteltes Wörterbuch mit benutzerdefinierter Typzuordnung in C#?

Wie deserialisiere ich verschachteltes JSON in ein verschachteltes Wörterbuch mit benutzerdefinierter Typzuordnung in C#?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 18:13:091012Durchsuche

How to Deserialize Nested JSON to a Nested Dictionary with Custom Type Mapping in C#?

Verschachteltes JSON in verschachteltes Wörterbuch deserialisieren mit benutzerdefinierter JSON-Typzuordnung

Deserialisieren von JSON-Objekten in ein verschachteltes Wörterbuch ist eine häufige Aufgabe, aber die Standard-Deserialisierung von System.Text.Json führt häufig dazu, dass alle verschachtelten Objekte als JsonElement-Instanzen dargestellt werden. Um eine spezifischere Typzuordnung zu erreichen, ist ein benutzerdefinierter JSON-Konverter erforderlich.

Benutzerdefinierter JSON-Konverter für die Typzuordnung

Der folgende benutzerdefinierte JSON-Konverter mit dem Namen ObjectAsPrimitiveConverter liefert das Gewünschte Typzuordnung:

  • String -> Zeichenfolge
  • Zahl -> int/double
  • Objekt -> Dictionary

Konverterimplementierung

Die Lese- und Schreibmethoden des Konverters führen die benutzerdefinierte Zuordnung durch:

  • Lesen:

    • Parst das eingehende JSON-Token basierend auf seinem Typ.
    • Gibt einen bestimmten .Net-Typ (String, Int, Double, Dictionary usw.) zurück oder löst eine Ausnahme aus, wenn der Typ nicht analysiert werden kann.
  • Schreiben:

    • Behandelt Objekttypen durch Schreiben eines leeren JSON-Objekts, wie für die benutzerdefinierte Konvertierung erforderlich.

Verwendung des Konverters

Zur Verwendung des benutzerdefinierten Konverters , es muss während der Deserialisierung zu den JsonSerializerOptions hinzugefügt werden:

var options = new JsonSerializerOptions
{
    Converters = { new ObjectAsPrimitiveConverter() },
    WriteIndented = true,
};

dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);

Konfiguration Optionen

Der Konverter bietet mehrere Konfigurationsoptionen:

  • FloatFormat: Gibt an, ob Gleitkommazahlen als Doppel- oder Dezimalzahlen geparst werden sollen.
  • UnknownNumberFormat: Bestimmt, wie mit Zahlen umgegangen wird, die nicht in a geparst werden können .Net-Primitivtyp.
  • ObjectFormat: Konfiguriert den Ausgabetyp für JSON-Objekte entweder als Dictionary oder ein ExpandoObject.

Beispiel-Geige

Eine Live-Demonstration finden Sie hier: [Beispiel-Geige](https://dotnetfiddle.net/tD9pPI)

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich verschachteltes JSON in ein verschachteltes Wörterbuch mit benutzerdefinierter Typzuordnung in C#?. 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