Apabila menggunakan XmlSerializer untuk bersiri XML, anda mungkin menghadapi cabaran semasa mengendalikan objek yang mengandungi senarai generik yang diperoleh daripada kelas abstrak. Percubaan untuk menyahsiri objek tersebut boleh mengakibatkan InvalidOperationException.
Untuk menyelesaikan isu ini, anda boleh menggunakan salah satu daripada tiga kaedah berikut:
1 Gunakan atribut [XmlInclude] pada jenis asas:
<code class="language-csharp">using System.Xml.Serialization; [XmlInclude(typeof(ChildA))] [XmlInclude(typeof(ChildB))] public abstract class ChildClass { public string ChildProp { get; set; } }</code>
2 Gunakan atribut [XmlElement] pada atribut:
<code class="language-csharp">public class MyWrapper { [XmlElement("A", Type = typeof(ChildA))] [XmlElement("B", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; } }</code>
3 Gunakan atribut [XmlArrayItem] pada atribut:
<code class="language-csharp">public class MyWrapper { [XmlArrayItem("A", Type = typeof(ChildA))] [XmlArrayItem("B", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; } }</code>
Nyahkomen pada pasangan atribut yang sepadan mengikut keperluan khusus anda. Dengan menggunakan salah satu kaedah ini, XmlSerializer akan dapat mengendalikan kelas terbitan semasa bersiri dan penyahsirilan.
Atas ialah kandungan terperinci Bagaimana untuk Mensiri Kelas Terbitan dalam Senarai Generik dengan XmlSerializer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!