我知道ShouldSerialize *模式和* Specified模式以及它们是如何工作的,但两者之间有什么区别吗?
当某些事情应该有条件地序列化时,是否有任何“陷阱”使用一种方法而不是另一种方法?
此问题仅供使用XmlSerializer,但也欢迎有关此主题的一般信息。
关于这个主题的信息非常少,因此可能是因为它们执行完全相同的目的而且它是一种风格选择。然而,看起来奇怪的是.NET实现者会通过反射分析类,并查找其中一个/两个模式来确定生成的序列化程序的行为,因为它会减慢序列化程序的生成速度,除非它只是一个向后兼容性工件。
编辑: 对于那些不熟悉这两个模式的人,如果*Specified属性或ShouldSerialize*方法返回true,则该属性被序列化。
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);
}