Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mensiri Kelas Terbitan dalam Senarai Generik menggunakan XmlSerializer?

Bagaimana untuk Mensiri Kelas Terbitan dalam Senarai Generik menggunakan XmlSerializer?

Patricia Arquette
Patricia Arquetteasal
2025-01-11 10:42:45533semak imbas

How to Serialize Derived Classes within Generic Lists using XmlSerializer?

Gunakan XmlSerializer untuk menyusun kelas terbitan

Apabila menggunakan XmlSerializer untuk mensiri objek yang mengandungi senarai generik kelas terbitan kelas abstrak, pengguna mungkin menghadapi pengecualian InvalidOperationException semasa proses penyahserikatan. Menyelesaikan masalah ini memerlukan teknik khusus untuk mengendalikan serialisasi objek terbitan.

Penyelesaian

Terdapat tiga kaedah yang berkesan:

  1. [XmlInclude] Atribut: Menggunakan atribut [XmlInclude] sebelum pengisytiharan kelas abstrak, termasuk setiap jenis kelas terbitan. Ini memastikan bahawa penyeri bersiri tahu cara mengendalikan jenis terbitan khusus ini.
  2. XmlElement/XmlArrayItem Atribut: Gunakan atribut [XmlElement] atau [XmlArrayItem] pada atribut yang mengandungi senarai. Tentukan jenis kelas terbitan dalam sifat ini untuk mengarahkan penyiri mengecam dan menyahsiri objek.
  3. Gabungan dua kaedah: Gabungkan kedua-dua kaedah ini dengan menggunakan [XmlInclude] pada kelas abstrak dan [XmlElement] atau [XmlArrayItem] pada sifat, sekali gus menyediakan pengendalian Jenis yang jelas dan tersirat.

Coretan kod berikut memberikan contoh pelaksanaan terperinci menggunakan setiap kaedah:

<code class="language-csharp">// 1: [XmlInclude(typeof(ChildA))]
// 1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 2: [XmlElement("A", Type = typeof(ChildA))]
// 2: [XmlElement("B", Type = typeof(ChildB))]
// 3: [XmlArrayItem("A", Type = typeof(ChildA))]
// 3: [XmlArrayItem("B", Type = typeof(ChildB))]
public List<ChildClass> Data { get; set; }

// ... 序列化和反序列化代码在此处 ...</code>

Pilih kaedah pilihan dan nyahkomen coretan kod yang sepadan untuk bersiri kelas terbitan.

Atas ialah kandungan terperinci Bagaimana untuk Mensiri Kelas Terbitan dalam Senarai Generik 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