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