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

Cyb*_*ist 8 c# xml xml-serialization

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

[XmlAttribute]
public String WorkClass
{
    get { return _workClass; }
    set { _workClass = value; }
}
Run Code Online (Sandbox Code Playgroud)

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

WorkClass=""
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*haw 11

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

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

public bool ShouldSerializeWorkClass() {
  return !string.IsNullOrEmtpy(WorkClass);
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 棒极了!这也是非直观的恕我直言.我希望序列化属性上有某种修饰符,比如[XmlAttribute(IgnoreOnNullOrEmpty ="true")]. (4认同)