技术问询:如何利用未公开方式阻止属性序列化为XML?
XML序列化中“Specified”后缀布尔属性的作用
当你把一个类设置为可XML序列化时,有个实用的内置规则要留意:如果某个标记了[XmlElement]特性的属性,对应存在一个名称以Specified结尾的关联布尔属性(不管这个布尔属性有没有附加特性),这个布尔值就会决定对应属性是否被序列化。
用一段代码实例来直观理解这个机制:
[XmlType(TypeName="XmlAble"),Serializable] public class XmlAble { [XmlElement] public DateTime MyDate { get { return MyDateField; } set { MyDateField = value; MyDateSpecified = true; } } private DateTime MyDateField; [XmlIgnore] public bool MyDateSpecified {get;set;} }
这里的逻辑很明确:
- 当
MyDateSpecified被设为true时,MyDate属性会被正常序列化到XML文档中; - 当
MyDateSpecified为false时,XML序列化器会直接忽略MyDate属性,不会把它写入最终的XML结果里。
这种机制特别适合处理可选字段场景——比如某个属性没被用户主动设置、保持默认值时,我们可以把对应的Specified属性设为false,避免无意义的默认值出现在XML里,让序列化结果更简洁精准。
内容的提问来源于stack exchange,提问作者NH.
相关产品推荐
相关产品推荐

