Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyahseri JSON dengan Medan Diketahui dan Tidak Diketahui ke dalam Kelas C#?

Bagaimanakah Saya Boleh Menyahseri JSON dengan Medan Diketahui dan Tidak Diketahui ke dalam Kelas C#?

DDD
DDDasal
2025-01-18 09:06:09234semak imbas

How Can I Deserialize JSON with Both Known and Unknown Fields into a C# Class?

Penyahserialisasian medan JSON yang diketahui dan tidak diketahui dalam kelas C#

Apabila memproses data JSON, anda sering menemui hasil bercampur yang mengandungi medan yang diketahui dan tidak diketahui. Ini boleh menyebabkan cabaran apabila menyahsiri data ke dalam kelas dengan set sifat tetap.

Soalan: Memandangkan hasil JSON yang mengandungi medan yang diketahui dan tidak diketahui, bagaimanakah saya boleh menyahsirikannya ke dalam kelas yang mengandungi sifat untuk medan yang diketahui dan mampu mengendalikan medan yang tidak diketahui?

Penyelesaian yang mungkin:

Menggunakan penghurai kontrak tersuai untuk JSON.NET: Penyelesaian ini memerlukan penghurai kontrak tersuai untuk mengendalikan medan yang tidak diketahui. Walau bagaimanapun, memahami cara untuk mencapai ini boleh menjadi mencabar.

Pensiri kontrak data: Walaupun penyiri kontrak data menyediakan acara untuk penyirian dan penyahserikatan, ia hanya menyokong mengatasi kaedah tertentu dan tidak memberikan kawalan penuh ke atas pengendalian medan.

Sirikan kepada objek dinamik dan pemetaan tersuai: Pendekatan ini melibatkan penyahserian JSON menjadi objek dinamik dan kemudian memetakan medan yang tidak diketahui secara manual. Walaupun boleh, kemungkinan besar ia memerlukan banyak kerja.

Mewarisi daripada DynamicObject: Pensiri yang bergantung pada refleksi untuk penyahserikatan mungkin gagal memanggil kaedah tryGetMember dan trySetMember apabila menggunakan kelas yang mewarisi daripada DynamicObject.

Gunakan RESTSharp dengan penyeri bersiri tersuai: Menyelesaikan masalah ini dalam RESTSharp memerlukan penggunaan serializer tersuai.

Penyelesaian yang lebih baik menggunakan JsonExtensionDataAttribute (JSON.NET v5):

JSON.NET versi 5 memperkenalkan JsonExtensionDataAttribute, yang menyediakan cara yang lebih mudah dan lebih cekap untuk mengendalikan medan yang tidak diketahui.

Contoh kod:

<code class="language-csharp">public class Product
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonExtensionData]
    public Dictionary<string, JToken> ExtraFields { get; set; }
}</code>

Dalam contoh ini, kamus ExtraFields akan mengandungi pasangan nilai kunci untuk medan yang tidak diketahui dalam hasil JSON.

Kesimpulan:

Dengan memanfaatkan JsonExtensionDataAttribute dalam JSON.NET versi 5, pembangun boleh mengurus medan yang diketahui dan tidak diketahui dengan cekap dalam hasil JSON dan mengakses medan yang tidak diketahui melalui kamus ExtraFields.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahseri JSON dengan Medan Diketahui dan Tidak Diketahui ke dalam Kelas C#?. 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