.net 如何阻止XmlSerializer发出空标记?
我有一个这样的物体.net 如何阻止XmlSerializer发出空标记?,.net,xml-serialization,xmlserializer,.net,Xml Serialization,Xmlserializer,我有一个这样的物体 public class UserObj { public string First {get; set;} public string Last {get; set;} public addr Address {get; set;} } public class addr { public street {get; set;} public town {get; set;} } 现在,当我在上面使用XmlSerialize
public class UserObj
{
public string First {get; set;}
public string Last {get; set;}
public addr Address {get; set;}
}
public class addr
{
public street {get; set;}
public town {get; set;}
}
现在,当我在上面使用XmlSerializer时,street和town都是空的,我在XML输出中得到了这个结果
<Address />
有没有办法不输出这个空标记
谢谢您可以自己实现和实现序列化例程。这样,就可以避免使用元素
此处的示例:您可以实现一个
shouldSerializedAddress
方法来决定是否应序列化Address属性:
public bool ShouldSerializeAddress()
{
return Address != null
&& !String.IsNullOrEmpty(Address.street)
&& !String.IsNullOrEmpty(Address.town);
}
如果存在具有此签名的方法,序列化程序将在序列化属性之前调用它
或者,您可以实现具有相同角色的AddressSpecified
属性:
public bool AddressSpecified
{
get
{
return Address != null
&& !String.IsNullOrEmpty(Address.street)
&& !String.IsNullOrEmpty(Address.town);
}
}
可以通过向属性添加DefaultValue属性来消除空值。当属性的值与默认值匹配时,它不会序列化。将默认值设置为null,以消除序列化。下面是一个例子:
using System.ComponentModel;
public class UserObj
{
public string First {get; set;}
public string Last {get; set;}
[DefaultValue(null)]
public addr Address {get; set;}
}
我认为为地址字段分配空值应该有效。为什么需要避免空标记?它们是有效的XML,不是吗?对于第二个解决方案,
xxxsspecified
,必须用[XmlIgnore]
标记AddressSpecified
属性,以防止它也被序列化,如本文中所述,这对我不起作用,但@Thomas Levesque的答案起作用。