Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pensirilan JSON ServiceStack Mengekalkan Maklumat Jenis untuk Kelas Diwarisi?

Bagaimanakah Pensirilan JSON ServiceStack Mengekalkan Maklumat Jenis untuk Kelas Diwarisi?

Mary-Kate Olsen
Lepaskan: 2025-01-21 12:52:11
asal
292 orang telah melayarinya

How Does ServiceStack's JSON Serialization Preserve Type Information for Inherited Classes?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Walau bagaimanapun, mengelakkan pewarisan dalam Objek Pemindahan Data (DTO) biasanya disyorkan:

  • DTO hendaklah serba lengkap dan mudah difahami oleh pelanggan; warisan menambah kerumitan yang tidak perlu.
  • Warisan dalam DTO mewujudkan kebergantungan merentasi sempadan sistem, memberi kesan kepada kebolehselenggaraan.
  • Pelanjutan proprietari seperti __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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan