Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mensiri Medan Peribadi dan Objek Bersarang Dalam dalam JSON.Net?

Bagaimanakah Saya Boleh Mensiri Medan Peribadi dan Objek Bersarang Dalam dalam JSON.Net?

Patricia Arquette
Lepaskan: 2025-01-07 20:22:40
asal
594 orang telah melayarinya

How Can I Serialize Private Fields and Deeply Nested Objects in JSON.Net?

Gunakan ContractResolver tersuai untuk menyelesaikan masalah medan peribadi dan subkelas dalam siri JSON

Apabila melakukan sandaran biasa atau penyahpepijatan sementara, anda perlu menyerikan medan peribadi dan medan bersarang dalam dalam kelas Dalam kes ini, anda boleh menggunakan ContractResolver tersuai JSON.Net.

Dengan melaksanakan ContractResolver tersuai, anda boleh mengawal proses bersiri dan mengendalikan medan awam dan swasta secara fleksibel. Kuncinya adalah untuk mengatasi kaedah CreateProperties dalam kelas ContractResolver.

Ubah suai kaedah ini untuk menggunakan BindingFlags untuk mengumpulkan sifat dan medan, mengimbas semua tahap keterlihatan: tahap awam, bukan awam dan contoh. Pendekatan komprehensif ini memastikan semua bidang yang berkaitan ditangkap.

Ingat untuk membuka kunci akses baca dan tulis untuk setiap harta selepas anda menentukannya. Anda boleh memberikan akses kepada sifat ini semasa penyirian dengan mengatasi sifat Keterlihatan mereka.

Berikut ialah contoh Penyelesai Kontrak tersuai:

<code class="language-csharp">public class MyContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var props = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                        .Select(p => base.CreateProperty(p, memberSerialization))
                    .Union(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                               .Select(f => base.CreateProperty(f, memberSerialization)))
                    .ToList();
        props.ForEach(p => { p.Writable = true; p.Readable = true; });
        return props;
    }
}</code>
Salin selepas log masuk

Dalam amalan, nyatakan ContractResolver tersuai dan serahkannya kepada penyeri bersiri JSON.Net seperti ini:

<code class="language-csharp">var settings = new JsonSerializerSettings() { ContractResolver = new MyContractResolver() };
var json = JsonConvert.SerializeObject(obj, settings);</code>
Salin selepas log masuk

Pendekatan ini secara berkesan memaksa JSON.Net untuk menyerikan medan peribadi dan objek bersarang dalam, sekali gus menyediakan sandaran lengkap graf objek.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Medan Peribadi dan Objek Bersarang Dalam dalam JSON.Net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan