【发布时间】:2010-10-16 17:33:27
【问题描述】:
假设我有这个对象:
[Serializable]
public class MyClass
{
public int Age { get; set; }
public int MyClassB { get; set; }
}
[Serializable]
public class MyClassB
{
public int RandomNumber { get; set; }
}
XmlSerializer 会像这样序列化对象:
<MyClass>
<Age>0</age>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
如何使属性 Age 可以为空? IE: 属性 Age 小于 0 时不序列化?
我尝试使用 Nullable,但它像这样序列化我的对象:
<MyClass>
<Age d5p1:nil="true" />
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
通过阅读 MSDN 文档,我发现:
您不能将 IsNullable 属性应用于类型为值类型的成员,因为值类型不能包含 nullNothingnullptra 空引用(在 Visual Basic 中为 Nothing)。此外,对于可为空的值类型,您不能将此属性设置为 false。当此类类型为 nullNothingnullptra 空引用(Visual Basic 中为 Nothing)时,它们将通过将 xsi:nil 设置为 true 来进行序列化。
来源:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx
我了解值类型不能设置为 null。值类型总是设置为某事。序列化无法根据当前值决定是否序列化。
我尝试了属性,但没有成功。我尝试创建一个 agecontainer 对象并使用属性操作它的序列化,但没有成功。
我真正想要的是:
<MyClass>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
当属性 Age 小于 0(零)时。
看来您必须实现自定义序列化。
是的,我也是这么想的,但我想离开它。
在应用程序中,对象要复杂得多,我不想自己处理序列化。
【问题讨论】:
标签: c# xml-serialization null value-type