【发布时间】:2012-08-06 20:21:27
【问题描述】:
在使用 .NET 的XmlSerializer 时,我遇到了一个非常奇怪的问题。
采取以下示例类:
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,有三种不同的方法可以解决由于序列化程序不知道Payment 的派生类型而导致的InvalidOperationException。
1.将XmlInclude 添加到Payment 类定义中:
这是不可能的,因为所有类都作为我无法控制的外部引用包含在内。
2。在创建XmlSerializer 实例期间传递派生类型的类型
没用。
3。为目标属性定义XmlAttributeOverrides 以覆盖属性的默认序列化(如this SO post 中所述)
也不起作用(XmlAttributeOverrides 初始化如下)。
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 构造函数。
注意:不起作用我的意思是 InvalidOperationException(BankPayment 不是预期的......)被抛出。
任何人都可以对这个主题有所了解吗?如何进一步解决问题?
【问题讨论】:
标签: c# .net xml xmlserializer