可以使用XmlAttributes选择性地使用XmlIgnore

本文关键字:XmlIgnore 选择性 XmlAttributes 可以使 | 更新日期: 2023-09-27 18:27:27

我有一个相当大的类要序列化为Xml,为了减少浪费的空间,我希望选择性地XmlIgnore一些类属性。例如,类中的一个属性只被分配了大约十分之一的值,如果我按照对序列化属性进行编码

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

如果没有值(大多数时候),它会被一次又一次地序列化为

WorkClass=""

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

可以使用XmlAttributes选择性地使用XmlIgnore

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

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

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

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

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