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