代码之家  ›  专栏  ›  技术社区  ›  John

如何阻止XmlSerializer发出空标记?

  •  6
  • John  · 技术社区  · 16 年前

    我有一个这样的物体,

    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;}
    }
    

     <Address />
    

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

    4 回复  |  直到 8 年前
        1
  •  2
  •   Scoregraphic    16 年前

    IXmlSerializable 并自行实现序列化例程。这样,就可以避开元素。

    举个例子: http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/

        2
  •  5
  •   Thomas Levesque    16 年前

    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);
        }
    }
    
        3
  •  0
  •   Steve Wranovsky    16 年前

    
    using System.ComponentModel;
    public class UserObj
    {
        public string First {get; set;}
        public string Last  {get; set;}
    
        [DefaultValue(null)]
        public addr Address {get; set;}
    
    }
    
        4
  •  0
  •   Anand Kumar    10 年前

    我认为给地址字段赋值应该是可行的。

    推荐文章