【发布时间】:2013-07-15 21:07:17
【问题描述】:
我遇到了我自己的类的 Xml 序列化问题。它是一个派生类,它自然没有无参数的构造函数——我不得不添加一个只是为了序列化。当然,正因为如此,我遇到了依赖/顺序问题。
这是一个简化,我希望它仍然能说明问题(如果事实证明我没有捕捉到问题,我保留增加说明的权利 - 我只是不想将复杂的对象模型转储给你: ))
public class Base{
public virtual Vector Value{ get; set;}
}
public class Derived : Base{
public Vector Coefficient { get; set; }
public override Vector Value{
get { return base.Value * Coefficient; }
set { base.Value = value / Coefficient; }
}
}
编辑:为避免混淆,我将原帖中的值类型double 替换为此处未显示的Vector 类型
当 XmlSerializer 反序列化 Derived 时,我遇到空值异常 - base.Value 和 this.Coefficient 都是 null。
有没有办法解决这个问题?
【问题讨论】:
-
那些是值类型,不可能是
null。发布确切的异常信息。 -
@HenkHolterman:授予。这是一种简化——在实际情况下,这些不是值类型,它们是空的——我用调试器检查过。
-
你试过[XmlInclude(typeof(Derived))]吗?
-
@terrybozzio - 实际上我有(没有完全理解它的作用)。它返回编译器时错误:属性“System.Xml.Serialization.XmlInclude”在此声明类型上无效。它仅对“类、结构、方法、接口”声明有效。
-
说实话,根据访问/分配属性的顺序来正确使用只是一个设计错误。您可能可以使用 XmlElementAttribute 上的 Order 属性对其产生一些影响,但我的建议是:找到一个不依赖于属性访问/分配顺序的设计。
标签: c# xml-serialization xml-deserialization