我有一个像这样的对象,
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并且街道和城镇都是空的时,我在XML输出中得到了这个,
<Address />
有没有办法不输出这个空标签?
由于
答案 0 :(得分:3)
您可以实现ShouldSerializeAddress
方法来决定是否应该序列化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);
}
}
答案 1 :(得分:2)
您可以实施IXmlSerializable
并自行实施序列化例程。这样,您就可以避免使用该元素。
此处的示例:http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/
答案 2 :(得分:0)
您可以通过向属性添加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;}
}
答案 3 :(得分:0)
我认为将空值分配给地址字段应该有效。