Tôi gặp sự cố rất lạ khi làm việc với .NET's XmlSerializer
.
Lấy các lớp ví dụ sau:
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, có ba phương pháp khác nhau để giải quyết vấn đề InvalidOperationException
do bộ nối tiếp không biết về các loại dẫn xuất của Payment
.
1. Thêm XmlInclude
vào Payment
định nghĩa lớp:
Điều này là không thể do tất cả các lớp được bao gồm dưới dạng tham chiếu bên ngoài mà tôi không có quyền kiểm soát.
2. Truyền các loại kiểu dẫn xuất trong khi tạo XmlSerializer
phiên bản
Không hoạt động.
3. Định nghĩa XmlAttributeOverrides
cho thuộc tính đích để ghi đè tuần tự hóa mặc định của thuộc tính (như được giải thích trong bài đăng SO này )
Cũng không hoạt động ( XmlAttributeOverrides
khởi tạo sau).
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);
Hàm tạo thích hợp XmlSerializer
sau đó sẽ được sử dụng.
LƯU Ý: không hoạt động Tôi có nghĩa là InvalidOperationException
( BankPayment
không mong đợi ... ) được ném.
Bất cứ ai có thể làm sáng tỏ về chủ đề này? Làm thế nào để xử lý và gỡ lỗi thêm vấn đề?