Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya Boleh Mensiri Medan Peribadi dan Subkelas dalam JSON.Net?

Bagaimanakah saya Boleh Mensiri Medan Peribadi dan Subkelas dalam JSON.Net?

Barbara Streisand
Barbara Streisandasal
2025-01-07 20:25:39318semak imbas

How Can I Serialize Private and Subclass Fields in JSON.Net?

JSON.Net: Mensiri Medan Peribadi dan Diwarisi

Panduan ini menunjukkan cara mensiri objek kompleks menggunakan JSON.Net, termasuk medan peribadi dan yang diwarisi daripada subkelas. Serialisasi menukarkan objek kepada format yang boleh disimpan atau boleh dihantar. Untuk objek dengan ahli persendirian atau warisan kompleks, JSON.Net memerlukan pengendalian tersuai.

Cabaran:

Anda mempunyai hierarki kelas dengan medan kebolehaksesan yang berbeza-beza (awam, peribadi, dilindungi, dsb.). Anda perlu mensiri semua medan, malah medan peribadi dan dalam subkelas, contohnya, untuk sandaran data.

Penyelesaian:

Penyelesaikan kontrak tersuai membenarkan mengatasi tingkah laku bersiri lalai JSON.Net. Penyelesai ini akan memaksa kemasukan semua medan, tanpa mengira pengubah aksesnya.

Pelaksanaan JSON.Net:

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

Penyelesaikan Kontrak Tersuai (MyContractResolver):

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

Penyelesai ini memeriksa semua medan dan sifat contoh (awam dan persendirian) bagi jenis yang diberikan dan kelas asasnya. Ia kemudian menandakan setiap sifat sebagai boleh dibaca dan boleh ditulis, memastikan penyirian lengkap. Ambil perhatian bahawa menggunakan pendekatan ini untuk mensiri medan peribadi harus dilakukan dengan berhati-hati, terutamanya untuk data sensitif keselamatan.

Atas ialah kandungan terperinci Bagaimanakah saya Boleh Mensiri Medan Peribadi dan Subkelas dalam JSON.Net?. 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