Saya mendapat masalah yang sangat aneh saat bekerja dengan .NET XmlSerializer
.
Ambil kelas contoh berikut:
public class Order
{
public PaymentCollection Payments { get; set; }
//everything else is serializable (including other collections of non-abstract types)
}
public class PaymentCollection : Collection<Payment>
{
}
public abstract class Payment
{
//abstract methods
}
public class BankPayment : Payment
{
//method implementations
}
AFAIK, ada tiga metode berbeda untuk menyelesaikannya InvalidOperationException
yang disebabkan oleh serializer tidak mengetahui tentang jenis turunannya Payment
.
1. Menambahkan XmlInclude
ke Payment
definisi kelas:
Ini tidak mungkin karena semua kelas dimasukkan sebagai referensi eksternal yang tidak dapat saya kendalikan.
2. Meneruskan tipe turunan selama pembuatan XmlSerializer
instance
Tidak berhasil.
3. Mendefinisikan XmlAttributeOverrides
properti target untuk menimpa serialisasi default properti (seperti yang dijelaskan dalam posting SO ini )
Juga tidak berfungsi ( XmlAttributeOverrides
inisialisasi mengikuti).
Type bankPayment = typeof(BankPayment);
XmlAttributes attributes = new XmlAttributes();
attributes.XmlElements.Add(new XmlElementAttribute(bankPayment.Name, bankPayment));
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof(Order), "Payments", attributes);
XmlSerializer
Konstruktor yang sesuai kemudian akan digunakan.
CATATAN: dengan tidak bekerja maksud saya InvalidOperationException
( BankPayment
tidak diharapkan ... ) dilemparkan.
Adakah yang bisa menjelaskan subjek ini? Bagaimana cara men-debug masalah lebih lanjut?