将Xml反序列化为Class的值不正确

时间:2014-06-19 12:33:09

标签: c# xml serialization deserialization

我使用Visual Studio 2013功能从#XML创建了该类"将XML粘贴为Class"。我正在反序列化xml。如果我在xml中得到一个空白节点,在Blank xml节点的情况下,我得到类的相应变量为" {object}"而不是null:

<ADDRESS>
 <LINE1>30 John Islip Street</LINE1> 
 <LINE2 />
 <LINE3 /> 
 <LINE4 /> 
</ADDRESS>

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class ADDRESS
{
    /// <remarks/>
    public string LINE1{get;set;}

    /// <remarks/>
    public object LINE2{get;set;}

    /// <remarks/>
    public object LINE3{get;set;}

    /// <remarks/>
    public object LINE4{get;set;}
}

反序列化代码:

var reader = new StringReader(xmlString);
var serializer = new XmlSerializer(typeof(ADDRESS));
var instance = (ADDRESS)serializer.Deserialize(reader);

对于字段LINE2,LINE3,LINE4,我们得到的值是&#34; {object}&#34;而不是null。

1 个答案:

答案 0 :(得分:1)

这是正确的行为。你的xml包含节点Line2 - Line4,所以它在你的类中。 如果您将Line2 - Line4的类型更改为字符串,则可以获得&#34;&#34;在他们中。要在此属性中获取null,您不应在xml中包含此节点,或者此节点应具有属性nillable='true'