CJM*_*CJM 15 c# serialization xml-serialization default-value xml-deserialization
我有一个问题反序列化一些XML; 由第三方提供的XML非常冗长,因此如果没有为特定元素设置值,它将提供并清空元素(例如<element1 />).
这是某些元素的问题,例如,那些用于存储整数的元素.我可以控制第三方,所以我可以让他们指定默认值(<myinteger>0</myinteger>)或者我可以让他们完全省略这些元素.这两个都应该避免这个问题.
但是,将来可能会出现这样的情况,即我们没有那么多控制权 - 在这种情况下,是否有一种方法可以通过装饰指定默认值?
[XmlElement("myinteger")=0???]
public int MyInteger
{
get
{
return myInteger;
}
set
{
myInteger= value;
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 38
XmlSerializer 不支持[DefaultValue],但它在使用它的序列化.在反序列化期间,它只是运行构造函数,然后获取传入的值并应用它们.那么,一种常见的方法是使用构造函数(或字段初始化程序):
public Foo() {
Bar = 4;
}
[DefaultValue(4), XmlAttribute("bar")]
public int Bar {get;set;}
Run Code Online (Sandbox Code Playgroud)
然而 ; XmlSerializer对此的解释不是"提供空元素" - 而是"省略元素(/ attribute)".甚至int?不映射到"空".要处理空元素,您必须将其作为字符串处理.这很难看.
| 归档时间: |
|
| 查看次数: |
20130 次 |
| 最近记录: |