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