ShouldSerialize * () vs * Padrão de serialização condicional especificado

Estou ciente dos padrões ShouldSerialize * e * Specified e como eles funcionam, mas há alguma diferença entre os dois?

Existem "truques" usando um método versus o outro quando certas coisas devem ser serializadas condicionalmente?

Esta pergunta é específica ao uso deXmlSerializer, mas informações gerais sobre esse tópico também são bem-vindas.

Há muito pouca informação sobre esse tópico, por isso pode ser porque eles executam exatamente o mesmo objetivo e é uma escolha de estilo. No entanto, parece estranho que os implementadores .NET analisem a classe via reflexão e procurem um ou ambos os padrões para determinar como o serializador gerado se comporta, pois diminui a geração do serializador, a menos que seja apenas um artefato de compatibilidade com versões anteriores.

EDITAR: Para aqueles não familiarizados com os dois padrões, se o*Specified propriedade ouShouldSerialize* método retorna true, então essa propriedade é serializada.

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);
}

questionAnswers(2)

yourAnswerToTheQuestion