XmlSerializer memberikan cabaran apabila mensiri objek yang mengandungi senarai generik kelas terbitan. Sifat kelas asas abstrak bagi unsur terbitan ini sering menghasilkan InvalidOperationException
semasa penyahserikatan. Mari kita terokai penyelesaian kepada masalah biasa ini.
Tiga strategi berkesan wujud untuk mengatasi had ini:
[XmlInclude]
Atribut<code class="language-csharp">//1: [XmlInclude(typeof(ChildA))] //1: [XmlInclude(typeof(ChildB))] public abstract class ChildClass { /* ... */ }</code>
Kaedah ini memerlukan penjelasan kelas asas (ChildClass
) dengan atribut [XmlInclude]
untuk setiap dan setiap kelas terbitan.
[XmlElement]
atau [XmlArrayItem]
pada Hartanah<code class="language-csharp"> //2: [XmlElement("A", Type = typeof(ChildA))] //2: [XmlElement("B", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; }</code>
Di sini, atribut [XmlElement]
atau [XmlArrayItem]
digunakan terus pada sifat yang mengandungi senarai kelas terbitan. Ini memberikan maklumat jenis eksplisit kepada penyeri bersiri.
[XmlArrayItem]
pada Harta<code class="language-csharp"> //3: [XmlArrayItem("A", Type = typeof(ChildA))] //3: [XmlArrayItem("B", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; }</code>
Pendekatan ini mencerminkan kaedah 2 tetapi menggunakan [XmlArrayItem]
bukannya [XmlElement]
, menawarkan struktur XML yang sedikit berbeza.
Setiap pendekatan ini membolehkan pensirilan dan penyahsirilan objek berjaya dengan senarai kelas terbitan. Pilihan optimum bergantung pada keperluan khusus aplikasi anda untuk struktur dan fleksibiliti XML.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berjaya Mensiri dan Menyahseri Senarai Generik Kelas Terbitan Menggunakan XmlSerializer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!