Я знаю как шаблон ShouldSerialize *, так и заданный шаблон и то, как они работают, но есть ли разница между ними?
Есть ли какие-либо "gotchas", используя один метод против другого, когда определенные вещи должны быть сериализованы условно?
Этот вопрос специфичен для использования XmlSerializer
, но общая информация по этой теме также приветствуется.
Здесь очень мало информации по этой теме, так что это может быть потому, что они выполняют ту же самую цель, и это выбор стиля. Тем не менее, кажется странным, что разработчики .NET анализировали класс с помощью рефлексии и искали оба/оба шаблона, чтобы определить, как ведет себя сгенерированный сериализатор, поскольку он замедляет генерацию сериализатора, если это не просто артефакт обратной совместимости.
EDIT: Для тех, кто не знаком с двумя шаблонами, если свойство *Specified
или метод ShouldSerialize*
возвращает true, тогда это свойство сериализуется.
public string MyProperty { get; set; }
//*Specified Pattern
[XmlIgnore]
public bool MyPropertySpecified { get{ return !string.IsNullOrWhiteSpace(this.MyProperty); } }
//ShouldSerialize* Pattern
public bool ShouldSerializeMyProperty()
{
return !string.IsNullOrWhiteSpace(this.MyProperty);
}