我正在使用DataContractSerializer。我的旧版本枚举如下
[DataContract]
public Enum Foo
{
[EnumMemberAttribute]
X,
[EnumMemberAttribute]
Y,
[EnumMemberAttribute]
Z
}
我有几个使用'Z'的文件。现在在最新版本中,我从枚举中删除了“Z”。 但是当我尝试在当前代码上使用这些旧文件时,我得到了'Z'的例外。
对于XmlSerializer,我们可以通过使用XmlAttributeOverrides来避免此问题。但是对于DataContractSerializer,我不知道如何处理这种情况。
请帮我解决。
答案 0 :(得分:1)
线索在“数据合同”一词中。你不能随意破坏合同。如果你这样做它将无效。现在,有一些灵活性......你通常可以添加合同,只要你不关心只知道旧合同的人(所以即使这是可疑的)。但是,也许更好的选择是:
[EnumMemberAttribute, Obsolete("Use Y instead", true)]
Z
这将仍然有效 DataContractSerializer
(尽管IIRC XmlSerializer
不喜欢它),但编译器会阻止您在常规代码中使用它。
如果您完全摆脱Z
,则无法再处理提及Z
的任何已保存数据。