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 InvalidOperationExceptionyang disebabkan oleh serializer tidak mengetahui tentang jenis turunannya Payment.
1. Menambahkan XmlIncludeke Paymentdefinisi kelas:
Ini tidak mungkin karena semua kelas dimasukkan sebagai referensi eksternal yang tidak dapat saya kendalikan.
2. Meneruskan tipe turunan selama pembuatan XmlSerializerinstance
Tidak berhasil.
3. Mendefinisikan XmlAttributeOverridesproperti target untuk menimpa serialisasi default properti (seperti yang dijelaskan dalam posting SO ini )
Juga tidak berfungsi ( XmlAttributeOverridesinisialisasi 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);
XmlSerializerKonstruktor yang sesuai kemudian akan digunakan.
CATATAN: dengan tidak bekerja maksud saya InvalidOperationException( BankPaymenttidak diharapkan ... ) dilemparkan.
Adakah yang bisa menjelaskan subjek ini? Bagaimana cara men-debug masalah lebih lanjut?