ShouldSerialize * () vs * Angegebenes bedingtes Serialisierungsmuster

Ich kenne das ShouldSerialize * -Muster und das * Specified-Muster sowie deren Funktionsweise, aber gibt es einen Unterschied zwischen den beiden?

Gibt es irgendwelche "Fallstricke", die eine Methode gegen die andere verwenden, wenn bestimmte Dinge bedingt serialisiert werden sollen?

Diese Frage ist spezifisch für die Verwendung vonXmlSerializer, aber auch allgemeine Informationen zu diesem Thema sind willkommen.

Es gibt nur sehr wenige Informationen zu diesem Thema, daher kann dies daran liegen, dass sie genau denselben Zweck erfüllen und es sich um eine Stilwahl handelt. Es erscheint jedoch seltsam, dass die .NET-Implementierer die Klasse über Reflektion analysieren und nach einem oder beiden Mustern suchen, um das Verhalten des generierten Serializers zu bestimmen, da dies die Generierung des Serializers verlangsamt, es sei denn, es handelt sich nur um ein Abwärtskompatibilitätsartefak

BEARBEITEN Für diejenigen, die mit den beiden Mustern nicht vertraut sind, wenn entweder das*Specified Eigenschaft oderShouldSerialize* -Methode gibt true zurück, dann wird diese Eigenschaft serialisiert.

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage