Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich verschachteltes JSON in ein verschachteltes Wörterbuch mit Typunterscheidung in .NET Core?
Deserialisierung von verschachteltem JSON in ein verschachteltes Wörterbuch
In .NET Core 3.1 bietet System.Text.Json eine Standardmethode zum Deserialisieren von JSON. Standardmäßig werden JSON-Objekte in JsonElement-Objekte deserialisiert, die Zugriff auf die JSON-Datenstruktur bieten, Werte jedoch nicht automatisch in die entsprechenden C#-Typen konvertieren.
Problem:
Das Ziel besteht darin, verschachtelte JSON-Objekte in Dictionary
Lösung:
Um dies zu erreichen, ein Brauch Der JsonConverter namens ObjectAsPrimitiveConverter ist erforderlich, da System.Text.Json keine sofort einsatzbereiten Funktionen für diese spezielle Typkonvertierung bereitstellt.
Der ObjectAsPrimitiveConverter bietet die folgenden Funktionen:
Typbewusst Deserialisierung:
Zahlenverarbeitung:
Objektbehandlung:
Implementierung:
public class ObjectAsPrimitiveConverter : JsonConverter<object> { // Configuration options FloatFormat FloatFormat { get; init; } UnknownNumberFormat UnknownNumberFormat { get; init; } ObjectFormat ObjectFormat { get; init; } public ObjectAsPrimitiveConverter() : this(FloatFormat.Double, UnknownNumberFormat.Error, ObjectFormat.Expando) { } public ObjectAsPrimitiveConverter( FloatFormat floatFormat, UnknownNumberFormat unknownNumberFormat, ObjectFormat objectFormat) { this.FloatFormat = floatFormat; this.UnknownNumberFormat = unknownNumberFormat; this.ObjectFormat = objectFormat; } // ... implementation details ... } public enum FloatFormat { Double, Decimal, } public enum UnknownNumberFormat { Error, JsonElement, } public enum ObjectFormat { Expando, Dictionary, }
Verwendung:
Zum Deserialisieren von JSON in ein dynamisches Objekt (oder ExpandoObject, falls konfiguriert) mithilfe von ObjectAsPrimitiveConverter, geben Sie den Konverter in den JsonSerializerOptions wie folgt an:
var options = new JsonSerializerOptions { Converters = { new ObjectAsPrimitiveConverter(floatFormat : FloatFormat.Double, unknownNumberFormat : UnknownNumberFormat.Error, objectFormat : ObjectFormat.Expando) }, WriteIndented = true, }; dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
Hinweise:
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich verschachteltes JSON in ein verschachteltes Wörterbuch mit Typunterscheidung in .NET Core?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!