6

我有一个这样的对象,

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

4 回答 4

6

您可以实现一种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);
    }
}
于 2010-06-02T14:41:53.513 回答
2

You may implement IXmlSerializable and implement the serialization routine on your own. This way, you can avoid the element.

An example here: http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/

于 2010-06-02T13:36:31.960 回答
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;}

}
于 2010-06-14T21:37:01.647 回答
0

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

于 2016-06-06T23:03:49.477 回答