我知道 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);
}
[XmlIgnore]
属性? - SinatrXmlSerializer
类文档的“控制生成的 XML”部分中,指定模式被简要提到这里,但是没有关于 ShouldSerialize() 模式的内容。不幸的是,当序列化是有条件的时,属性无法起作用。 - JNYRanger