可以使用XmlAttributes来选择性地使用XmlIgnore吗?

时间:2012-03-12 17:54:57

标签: c# xml xml-serialization

我有一个相当大的类来序列化为Xml,并且为了减少浪费的空间,想选择性地XmlIgnore一些类属性。例如,类中的一个属性仅为十分之一左右分配一个值,如果我按如下方式对序列化属性进行编码

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

如果没有值(大部分时间),则会反复序列化为

WorkClass=""

如果值为空,是否有一个选项或属性会忽略序列化属性,但如果它不为空则不会忽略它?

1 个答案:

答案 0 :(得分:11)

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

true包含空字符串以外的其他内容时,以下方法将返回WorkClass,如果您使用的是.NET Framework 4,则可以选择使用string.IsNullOrWhitespace()检查空格' '

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

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

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