如何阻止XmlSerializer发出空标记?

时间:2010-06-02 13:31:33

标签: .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;}
}

现在当我在它上面使用XmlSerializer并且街道和城镇都是空的时,我在XML输出中得到了这个,

 <Address />

有没有办法不输出这个空标签?

由于

4 个答案:

答案 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)

我认为将空值分配给地址字段应该有效。