Penyahserikatan jenis terbitan Json.net
Apabila memproses data JSON, adalah berfaedah untuk mensiri dan menyahsiri objek yang mengikuti perhubungan kelas terbitan asas. Walau bagaimanapun, Json.net (Newtonsoft) memerlukan konfigurasi khusus untuk mengendalikan jenis terbitan dengan cekap.
Soalan:
Pertimbangkan asas dan kelas terbitan berikut:
<code>public class Base { public string Name; } public class Derived : Base { public string Something; }</code>
Jika anda cuba menyahsiri rentetan JSON yang mengandungi objek kelas asas dan terbitan kepada List<Base>
, anda hanya akan mendapat objek kelas asas, sekali gus kehilangan maklumat jenis terbitan.
Penyelesaian:
Untuk berjaya menyahsiri jenis terbitan, anda perlu mendayakan pengendalian nama jenis. Ini boleh dicapai dengan mencipta objek JsonSerializerSettings
dan menetapkan sifat TypeNameHandling
kepada All
. Hantar objek tetapan ini kepada operasi bersiri dan penyahseriran:
<code>Base object1 = new Base() { Name = "Object1" }; Derived object2 = new Derived() { Something = "Some other thing" }; List<Base> inheritanceList = new List<Base>() { object1, object2 }; JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string Serialized = JsonConvert.SerializeObject(inheritanceList, settings); List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);</code>
Dengan mendayakan pengendalian nama jenis, Json.net akan memasukkan maklumat jenis dalam rentetan JSON. Semasa penyahserikatan, ia akan menggunakan maklumat ini untuk mencipta semula objek terbitan dengan betul dan mengisi deserializedList
.
Nota: Menggunakan kaedah ini mendedahkan nama semua objek serta senarai itu sendiri dalam data bersiri. Jika ini adalah masalah, pertimbangkan cara alternatif untuk mengendalikan perhubungan polimorfik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahserialisasi Jenis Terbitan dalam JSON.NET Semasa Memelihara Maklumat Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!