Heim > Backend-Entwicklung > C++ > Wie deserialisiere ich verschachteltes JSON mithilfe von System.Text.Json in ein verschachteltes Wörterbuch von Objekten mit den richtigen C#-Typen?

Wie deserialisiere ich verschachteltes JSON mithilfe von System.Text.Json in ein verschachteltes Wörterbuch von Objekten mit den richtigen C#-Typen?

Linda Hamilton
Freigeben: 2024-12-25 02:40:17
Original
960 Leute haben es durchsucht

How to Deserialize Nested JSON to a Nested Dictionary of Objects with Proper C# Types Using System.Text.Json?

Deserialisieren von verschachteltem JSON in ein verschachteltes Wörterbuch von Objekten mit den richtigen C#-Typen

In C# .Net Core 3.1 mit System.Text.Json, Deserialisieren verschachtelte JSON-Objekte in Dictionary kann dazu führen, dass jedes Objekt ein JsonElement ist. Wir können den Deserialisierungsprozess jedoch anpassen, um für jeden JSON-Eigenschaftstyp die richtigen C#-Typen zu erhalten:

Benutzerdefinierter JsonConverter: ObjectAsPrimitiveConverter

Da System.Text.Json kein eingebauter Zur Unterstützung der Deserialisierung von Freiform-JSON in primitive Typen benötigen wir einen benutzerdefinierten JsonConverter. ObjectAsPrimitiveConverter, der die folgende Funktionalität bietet:

  • String konvertieren:JSON-String-Eigenschaften in C#-String
  • Nummer konvertieren: JSON-Nummerneigenschaften für C# int/double
  • Objekt konvertieren: JSON-Objekteigenschaften in Dictionary

Code-Implementierung:

public class ObjectAsPrimitiveConverter : JsonConverter<object>
{
    // Configure converter settings (float format, unknown number handling, object format)
    ...

    public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
    {
        // Handle custom serialization if needed
    }

    public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // Handle custom deserialization based on token type
    }
}
Nach dem Login kopieren

Konfiguration und Verwendung:

Um den benutzerdefinierten Konverter zu verwenden, konfigurieren Sie Ihre JsonSerializerOptions mit dem ObjectAsPrimitiveConverter und geben Sie die gewünschten Einstellungen an:

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

// Deserialize to object or dynamic
dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
Nach dem Login kopieren

Hinweise:

  • Der Konverter verarbeitet Randfälle wie Zahlen mit willkürliche Genauigkeit, die möglicherweise nicht in primitive C#-Typen passt. Es bietet Optionen zur Fehlerbehandlung oder zur Rückgabe eines JsonElements für solche Zahlen.
  • Sie können den Konverter so konfigurieren, dass er verschiedene Float-Formate (doppelt/dezimal) und Objektdarstellungen (Dictionary oder ExpandoObject) verwendet.
  • Als Referenz steht eine Demo-Geige zur Verfügung.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich verschachteltes JSON mithilfe von System.Text.Json in ein verschachteltes Wörterbuch von Objekten mit den richtigen C#-Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage