Если вы просто хотите условную сериализацию, вы можете сделать это с помощью шаблона ShouldSerialize *. Так что если у вас есть свойство Name
(например), вы можете добавить:
public bool ShouldSerializeName() {
/* validate; return true to serialize, false to skip */
}
Метод должен быть общедоступным для XmlSerializer, хотя тот же шаблон работает в других местах (например, System.ComponentModel), даже если no-public.