Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mensiri Kelas Terbitan Menggunakan XmlSerializer?

Bagaimanakah Saya Boleh Mensiri Kelas Terbitan Menggunakan XmlSerializer?

DDD
DDDasal
2025-01-11 09:53:43227semak imbas

How Can I Serialize Derived Classes Using XmlSerializer?

Gunakan XmlSerializer untuk menyusun kelas terbitan

Pembangun mungkin menghadapi InvalidOperationException jika menggunakan XmlSerializer apabila cuba mensiri objek yang mengandungi kelas abstrak sebagai sebahagian daripada sifatnya. Mengatasi halangan ini memerlukan pengendalian kelas terbitan yang cekap semasa bersiri.

Penyelesaian

XmlSerializer menyediakan tiga kaedah untuk menyelesaikan masalah ini:

  1. [XmlInclude] Atribut: Digunakan pada kelas asas, ini menunjukkan bahawa serializer mengandungi kelas terbitan.

    <code class="language-csharp"> [XmlInclude(typeof(ChildA))]
     [XmlInclude(typeof(ChildB))]
     public abstract class ChildClass
     {
         public string ChildProp { get; set; }
     }</code>
  2. XmlElement/XmlArrayItem Atribut: Atribut ini hendaklah digunakan pada sifat yang membawa senarai, menyatakan jenis setiap elemen kelas terbitan.

    <code class="language-csharp"> [XmlElement("A", Type = typeof(ChildA))]
     [XmlElement("B", Type = typeof(ChildB))]
     public List<ChildClass> Data { get; set; }</code>
  3. XmlArrayItem Atribut: Diletakkan pada senarai itu sendiri, mereka mentakrifkan jenis elemen yang boleh terkandung dalam senarai.

    <code class="language-csharp"> [XmlArrayItem("A", Type = typeof(ChildA))]
     [XmlArrayItem("B", Type = typeof(ChildB))]
     public List<ChildClass> Data { get; set; }</code>

Dengan memilih salah satu daripada pilihan ini dan menyahkomen blok kod yang sepadan dalam sampel kod yang disediakan, pembangun boleh berjaya mensiri dan menyahsiri objek yang mengandungi kelas terbitan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Kelas Terbitan Menggunakan XmlSerializer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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