Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyahserialisasikan JSON Bersarang kepada Kamus Objek Bersarang dengan Jenis C# yang Betul Menggunakan System.Text.Json?

Bagaimana untuk Menyahserialisasikan JSON Bersarang kepada Kamus Objek Bersarang dengan Jenis C# yang Betul Menggunakan System.Text.Json?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 02:40:17990semak imbas

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

Menyahserialisasi JSON Bersarang kepada Kamus Objek Bersarang dengan Jenis C# yang Betul

Dalam C# .Net Core 3.1 menggunakan System.Text.Json, penyahserikan objek JSON bersarang pada Kamus boleh menyebabkan setiap objek menjadi JsonElement. Walau bagaimanapun, kami boleh menyesuaikan proses penyahserikatan untuk mendapatkan jenis C# yang betul untuk setiap jenis sifat JSON:

Custom JsonConverter: ObjectAsPrimitiveConverter

As System.Text.Json kekurangan binaan- sebagai sokongan untuk menyahsiri JSON bentuk bebas kepada jenis primitif, kami memerlukan tersuai JsonConverter, ObjectAsPrimitiveConverter, yang menyediakan fungsi berikut:

  • Tukar String: JSON string properties to C# string
  • Tukar Nombor: sifat nombor JSON kepada C# int/double
  • Tukar Objek: sifat objek JSON kepada Kamus

Pelaksanaan Kod:

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
    }
}

Tatarajah dan Penggunaan:

Untuk menggunakan penukar tersuai, konfigurasikan JsonSerializerOptions anda dengan ObjectAsPrimitiveConverter dan tentukan tetapan yang diingini:

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

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

Nota:

  • Penukar mengendalikan kes tepi seperti nombor dengan ketepatan sewenang-wenangnya, yang mungkin tidak sesuai dengan jenis C# primitif. Ia menyediakan pilihan untuk pengendalian ralat atau mengembalikan JsonElement untuk nombor tersebut.
  • Anda boleh mengkonfigurasi penukar untuk menggunakan format apungan yang berbeza (berganda/perpuluhan) dan perwakilan objek (Kamus atau ExpandoObject).
  • Rebab demo tersedia untuk rujukan.

Atas ialah kandungan terperinci Bagaimana untuk Menyahserialisasikan JSON Bersarang kepada Kamus Objek Bersarang dengan Jenis C# yang Betul Menggunakan System.Text.Json?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn