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

Bagaimanakah Saya Boleh Mensiri Senarai Jenis Terbitan Kelas Asas Abstrak Menggunakan XmlSerializer?

Linda Hamilton
Lepaskan: 2025-01-11 09:47:42
asal
963 orang telah melayarinya

How Can I Serialize a List of Abstract Base Class's Derived Types Using XmlSerializer?

Gunakan XmlSerializer untuk menyusun kelas terbitan

Mensiri objek yang mengandungi senarai generik kelas asas abstrak boleh memberikan cabaran apabila menggunakan XmlSerializer. Artikel ini meneroka cara menyelesaikan masalah ini.

Soalan:

Objek yang mengandungi senarai kelas terbitan (Senarai), dengan kelas terbitan adalah abstrak dan boleh menyebabkan InvalidOperationException semasa proses penyahserikatan.

Penyelesaian:

Untuk berjaya mensirikan objek terbitan, tiga kaedah boleh digunakan:

  1. Gunakan [XmlInclude]: Atribut ini membolehkan anda menentukan jenis terbitan untuk disertakan semasa bersiri. Sesuai untuk situasi di mana bilangan jenis terbitan adalah kecil.
  2. Menggunakan XmlElement/XmlArrayItem: Sifat ini membolehkan anda menentukan secara langsung jenis terbitan yang dikaitkan dengan harta tersebut. Lebih sesuai untuk situasi di mana bilangan jenis terbitan adalah besar.

Contoh kod:

Kod berikut menunjukkan tiga kaedah:

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Xml.Serialization;

// 方法一:使用 [XmlInclude]
[XmlInclude(typeof(ChildA))]
[XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 方法二:使用 XmlElement
public class MyWrapper {
    [XmlElement("ChildA", Type = typeof(ChildA))]
    [XmlElement("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

// 方法三:使用 XmlArrayItem
public class MyWrapper2 {
    [XmlArrayItem("ChildA", Type = typeof(ChildA))]
    [XmlArrayItem("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

public class ChildA : ChildClass {
    public string AProp { get; set; }
}

public class ChildB : ChildClass {
    public string BProp { get; set; }
}</code>
Salin selepas log masuk

Dengan membatalkan ulasan pasangan atribut yang diperlukan, anda boleh memilih penyelesaian yang paling sesuai dengan keperluan anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Senarai Jenis Terbitan Kelas Asas Abstrak Menggunakan XmlSerializer?. 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