- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在使用 .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
}
据我所知,有三种不同的方法可以解决由于序列化程序不知道 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
不是预期的... ) 被抛出。
任何人都可以阐明这个主题吗?如何进一步调试问题?
最佳答案
这对我有用:
[XmlInclude(typeof(BankPayment))]
[Serializable]
public abstract class Payment { }
[Serializable]
public class BankPayment : Payment {}
[Serializable]
public class Payments : List<Payment>{}
XmlSerializer serializer = new XmlSerializer(typeof(Payments), new Type[]{typeof(Payment)});
关于c# - 使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886290/
我正在开发一个网络服务,它返回我在网络服务中定义的类数组。当我测试它时,我得到:“System.InvalidOperationException:类型 WebSite+HostHeader 不是预期
在使用 .NET 的 XmlSerializer 时,我遇到了一个非常奇怪的问题。 采用以下示例类: public class Order { public PaymentCollection
我有一个关于这个序列化问题的奇怪案例 - 这个问题已经在这个网站上被问过很多次了,我已经解决了其中的一些问题,并尝试了一些常用的方法但无济于事: 将 [XmlInclude] 添加到引发错误的类中 删
我调用的是别人的web服务,他们提供了一个WSDL文件和一堆XSD文件。我已经使用本地 WSDL 文件在我的项目中创建了 Web 引用,并使用 xsd.exe 创建了一个类。我调用的网络方法是 obj
因此,当我可以在 MSMQ 上放置消息时,旧代码库运行良好。但是,我收到的新代码库不起作用,老实说,我不知道我缺少什么。 基类: [DataContract] [KnownType(t
我是一名优秀的程序员,十分优秀!