ShouldSerialize * () vs * Pattern di serializzazione condizionale specificato

Sono a conoscenza sia del pattern ShouldSerialize * che del pattern * Specified e di come funzionano, ma c’è qualche differenza tra i due?

Ci sono dei “trucchi” usando un metodo rispetto all’altro quando certe cose dovrebbero essere serializzate in modo condizionale?

Questa domanda è specifica per l’utilizzo di XmlSerializer , ma anche le informazioni generali su questo argomento sono benvenute.

Ci sono poche informazioni su questo argomento, quindi potrebbe essere perché hanno lo stesso identico scopo ed è una scelta di stile. Tuttavia, sembra strano che gli implementatori .NET analizzino la class tramite riflessione e cerchino entrambi i modelli per determinare come si comporta il serializzatore generato poiché rallenta la generazione del serializzatore a meno che non sia solo un artefatto di compatibilità a ritroso.

EDIT: per coloro che non hanno familiarità con i due pattern se il metodo *Specified property o ShouldSerialize* restituisce true, la proprietà viene serializzata.

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