Penyahserialisasian Nested JSON ke dalam Nested Dictionary
Dalam .NET Core 3.1, System.Text.Json menyediakan cara standard untuk menyahsiri JSON. Secara lalai, objek JSON dinyahsiri menjadi objek JsonElement, yang menyediakan akses kepada struktur data JSON tetapi tidak menukar nilai secara automatik kepada jenis C# yang sepadan.
Masalah:
Matlamatnya adalah untuk menyahsiri objek JSON bersarang ke dalam Kamus
Penyelesaian:
Untuk mencapai matlamat ini, JsonConverter tersuai yang dipanggil ObjectAsPrimitiveConverter adalah perlu, kerana System.Text.Json tidak menyediakan kefungsian luar kotak untuk penukaran jenis khusus ini.
ObjectAsPrimitiveConverter menyediakan keupayaan berikut:
Sedar jenis penyahserikatan:
Pengendalian nombor:
Pengendalian objek:
Pelaksanaan:
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, }
Penggunaan:
Untuk menyahsiri JSON menjadi objek dinamik (atau ExpandoObject jika dikonfigurasikan) menggunakan ObjectAsPrimitiveConverter, nyatakan penukar dalam JsonSerializerOptions seperti ini:
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);
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Menyahserialisasikan JSON Bersarang menjadi Kamus Bersarang dengan Diskriminasi Jenis dalam Teras .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!