XmlSerializer将带空字符串的属性反序列化为零

问题描述:

我想使用XmlSerializer并将带有空字符串值的属性反序列化为用于整数的零。我看到的有关使用空字符串反序列化属性的每个问题都涉及将可为空的整数设置为空 - 但我想将不可为空的整数设置为零,而不是空值。XmlSerializer将带空字符串的属性反序列化为零

有没有简单的方法来做到这一点,而不是实现IXmlSerializable,只是自己处理它?

一种方法可以配置一个虚拟序列化属性,并在实践中使用不同的属性:

private int myint; 

[XmlIgnore] 
public int MyInt { get; set; } 

[XmlElement("MyInt")] 
public string MyIntString 
{ 
    get { return this.MyInt.ToString(); } 
    set { this.MyInt = Convert.ToInt32(value ?? string.Empty); } 
} 
+0

感谢您的答复。实际上,我已经尝试了上面列出的第一种方法,但XmlSerializer抛出一个InvalidOperationException异常,并带有消息“Can not serialize member'MYPROPERTY'of System.Nullable'1 [System.Int32]。XmlAttribute/XmlText不能用于编码复杂类型。 “ 我只能让MYPROPERTY成为一个字符串并创建一个试图转换为int的方法 - 但我还没有把它用到那么远,因为我仍然抱着更简单方法的希望。也许我在做别的事情呢? – 2010-08-12 13:17:37

+0

哦,你说得对。我已经习惯了WCF,它更容易处理这些类型。回到当天,我会做的是将一个虚拟属性用作字符串,并将其解析为我的不动产。我会相应地更新这篇文章。 – kbrimington 2010-08-12 13:21:25

+0

非常感谢!这看起来最干净的方法。太糟糕了没有像[XmlAttributeAttribute(EmptyValue =“0”)] :) – 2010-08-12 13:27:29