这是Can XmlSerializer deserialize into a Nullable<int>?的副本,但我需要一个既不会改变xml文档也不会强迫我实现IXmlSerializable接口的解决方案。我不想实现IXmlSerializable,因为我在<number
&gt;旁边有许多其他元素。正确反序列化。
我的xml可以包含元素<number>4</number>
或<number/>
<root>
...
either <number>4</number> or <number/>
... [other elements]
</root>
类
public class root
{
public int? number {get; set;}
...
}
不起作用。
答案 0 :(得分:9)
您可以使用代理属性。
public class MyType1
{
// XmlIgnore means it is not directly serialized
[XmlIgnore]
public int? number
{
get; set;
}
// acts as a surrogate for the nullable property
[XmlElement("number")]
public string _number_Surrogate
{
get
{
return (number.HasValue) ? number.ToString() : "";
}
set
{
if (!value.Equals(""))
{
number = Int32.Parse(value);
}
}
}
public System.DateTime Time
{
get; set;
}
}
答案 1 :(得分:-1)
您总是可以在最终的xml输出上执行字符串替换。
Replace(" i:nil=\"true\"/>","/>");
一般来说,尝试使用字符串操作来破解xml是一个坏主意,但上面的替换是安全的,并且总是将<anything i:nil="true"/>
转换为<anything/>
。
这是一个黑客,但考虑到替代方案是一个可接受的。