ShouldSerialize * () vs * Patrón de serialización condicional especificado

Soy consciente tanto del patrón DoesSerialize * como del patrón * Especificado y de cómo funcionan, pero ¿hay alguna diferencia entre los dos?

¿Hay alguna "trampa" usando un método frente al otro cuando ciertas cosas deben ser serializadas condicionalmente?

Esta pregunta es específica para el uso deXmlSerializer, pero la información general sobre este tema también es bienvenida.

Hay muy poca información sobre este tema, por lo que puede deberse a que realizan exactamente el mismo propósito y es una elección de estilo. Sin embargo, parece extraño que los implementadores de .NET analicen la clase a través de la reflexión y busquen uno o ambos patrones para determinar cómo se comporta el serializador generado, ya que ralentiza la generación del serializador a menos que sea solo un artefacto de compatibilidad con versiones anteriores.

EDITAR: Para aquellos que no están familiarizados con los dos patrones si*Specified propiedad oShouldSerialize* El método devuelve verdadero, entonces esa propiedad se serializa.

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta