ServiceStack JSON Serialisasi: Mengekalkan Maklumat Jenis dalam Warisan
Siri JSON ServiceStack memerlukan pertimbangan yang teliti terhadap pengendalian jenis untuk mengelakkan rasuah data. Mari kita ilustrasikan ini dengan contoh:
<code class="language-csharp">public class Container { public Animal Animal { get; set; } } public class Animal { } public class Dog : Animal { public void Speak() { Console.WriteLine("Woof!"); } } var container = new Container { Animal = new Dog() }; var json = JsonSerializer.SerializeToString(container); var container2 = JsonSerializer.DeserializeFromString<Container>(json); ((Dog)container.Animal).Speak(); // Works ((Dog)container2.Animal).Speak(); // InvalidCastException</code>
Kod ini menyerlahkan masalah penyahsiran biasa: jenis Dog
hilang selepas pensirian JSON. JSON standard tidak mempunyai maklumat jenis yang wujud.
ServiceStack menangani perkara ini dengan melanjutkan JSON dengan sifat __type
. Ini bertindak sebagai pengecam jenis, membenarkan penyahserikatan yang betul bagi jenis yang diwarisi. Walau bagaimanapun, ServiceStack hanya menambah sifat ini apabila perlu (antara muka, objek terikat lewat, kelas abstrak).
Untuk mengekalkan jenis Dog
, faktor semula Animal
sebagai antara muka atau kelas abstrak:
<code class="language-csharp">public interface IAnimal // Interface { } public abstract class Animal // Abstract class { }</code>
Walau bagaimanapun, mengelakkan pewarisan dalam Objek Pemindahan Data (DTO) biasanya disyorkan:
__type
menjejaskan kesalingoperasian.Dengan menggunakan harta __type
dengan bijak dan mengikut amalan terbaik ini, ServiceStack memastikan penyahserikatan yang tepat bagi jenis yang diwarisi sambil mengoptimumkan kelajuan dan fleksibiliti bersiri.
Atas ialah kandungan terperinci Bagaimanakah Pensirilan JSON ServiceStack Mengekalkan Maklumat Jenis untuk Kelas Diwarisi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!