【问题标题】:Can one use XmlAttributes to selectively XmlIgnore?可以使用 XmlAttributes 选择性地 XmlIgnore 吗?
【发布时间】:2012-03-12 17:54:57
【问题描述】:

我有一个比较大的类要序列化为Xml,为了减少浪费的空间想有选择地XmlIgnore类的一些属性。例如,类中的一个属性仅被赋值十次左右,如果我将序列化属性编码如下

[XmlAttribute]
public String WorkClass
{
    get { return _workClass; }
    set { _workClass = value; }
}

如果没有值(大部分时间),这将被一遍又一遍地序列化为

WorkClass=""

是否有一个选项或属性在其值为空时忽略该属性进行序列化,但如果它不为空则不忽略它?

【问题讨论】:

    标签: c# xml xml-serialization


    【解决方案1】:

    您可以为每个不希望序列化的值创建方法

    WorkClass 包含非空字符串时,以下方法将返回true,如果您使用的是.NET Framework 4,您可以选择使用string.IsNullOrWhitespace(),它还会检查空格@987654324 @。

    public bool ShouldSerializeWorkClass() {
      return !string.IsNullOrEmtpy(WorkClass);
    }
    

    当 Xml 序列化程序运行时,它会根据命名约定查找此方法,然后选择是否序列化该属性。

    方法的名称应始终以ShouldSerialize 开头,然后以属性名称结尾。然后你只需要根据你想要的任何条件返回一个布尔值,关于是否序列化值。

    【讨论】:

    • 太棒了!恕我直言,这也是不直观的。我本来希望在序列化属性上有某种修饰符,你知道的,比如 [XmlAttribute(IgnoreOnNullOrEmpty="true")]。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多