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

本文关键字:不正确 Xml 反序列化 | 更新日期: 2023-09-27 18:09:15

我使用Visual Studio 2013功能"粘贴XML为类"从XML创建了类。我正在反序列化xml。如果我在xml中获得一个空白节点,在空白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字段,我们得到的值是"{object}"而不是null。

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

这是正确的行为。您的xml包含节点Line2 - Line4,因此它在您的类中。如果您将Line2 - Line4的类型更改为字符串,则可以在其中获得"。要在此属性中获得null,您不应该在xml中包含此节点,或者该节点应该具有属性nillable='true'