Можно ли использовать XmlAttributes для выборочного XmlIgnore? - PullRequest
8 голосов
/ 12 марта 2012

У меня довольно большой класс для сериализации в формате Xml, и для уменьшения потерянного пространства хотелось бы выборочно XmlIgnore некоторых свойств класса. Например, одному свойству в классе присваивается значение только один из десяти раз или около того, и если я кодирую атрибут сериализации следующим образом

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

Если значение отсутствует (большую часть времени), оно снова и снова сериализуется как

WorkClass=""

Есть ли опция или атрибут, которые игнорировали бы свойство для сериализации, если его значение пусто, но не игнорировали бы его, если оно не пустое?

1 Ответ

11 голосов
/ 12 марта 2012

Вы можете создать методы для каждого из значений, которые вы не хотите сериализовать

Следующий метод вернет true, если WorkClass содержит что-то отличное от пустой строки, если вы используете.NET Framework 4, вы можете использовать string.IsNullOrWhitespace(), который также будет проверять наличие пробелов ' '.

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

Когда запускается Xml Serializer, он будет искать этот метод, основываясь на соглашении об именахи затем выберите, следует ли сериализовать это свойство или нет.

Имя метода всегда должно начинаться с ShouldSerialize, а затем заканчиваться именем свойства.Затем вам просто нужно вернуть логическое значение, основанное на любых условных выражениях, относительно того, следует ли сериализовать значение или нет.

...