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!