我对 .NET XmlIgnoreAttribute的理解是否正确,它说:
指示 XmlSerializer 的 Serialize 方法不要序列化公共字段或公共读/写属性值。
那:
- 该属性将被反序列化,如果存在于 XML 文件中?
- 该属性不会被序列化为新的 XML 文件吗?
我问的原因是我已将文件中的属性替换为具有更多选项的新属性。旧属性是一个简单的布尔属性,而新属性是一个枚举。我已经更改了旧属性,以便它将新属性的值转换为布尔值,根据我添加新属性之前旧属性的含义,get 和 set 都已实现。
这使我可以通过读取设置新属性的旧属性来静默升级新文件,并在序列化时添加新属性。
但是,我想从新的 xml 文件中删除旧的属性,所以我想知道如果我用 标记它会发生什么[XmlIgnore]
,旧的 xml 文件仍然会正确反序列化并从文件中读取该属性,还是会被完全忽略?
如果没有,以下更改会做我想要的吗?
[XmlAttribute("is-list")]
[DefaultValue(false)]
public bool IsList
{
get { return false; }
set {
if (value)
ListHandling = ListHandling.All;
}
}
这将为所有新对象返回 false,由于我指定了默认值,因此将被忽略,如果存在于旧文件中并设置为 true,则会更改 ListHandling 属性,这是重要的新属性。
编辑:经过测试,我已经验证这两种方法似乎都可以满足我的要求。不过我会留下这个问题,因为我仍然想知道上面提到的第一个行为是否只是一个实现细节,或者是否可以这样理解文档。