数据合约序列化程序和枚举问题
本文关键字:枚举 问题 程序 序列化 数据 | 更新日期: 2023-09-27 18:36:20
我正在使用DataContractSerializer。我在旧版本中有枚举,如下所示
[DataContract]
public Enum Foo
{
[EnumMemberAttribute]
X,
[EnumMemberAttribute]
Y,
[EnumMemberAttribute]
Z
}
我有几个使用"Z"的文件。现在在最新版本中,我从枚举中删除了"Z"。但是当我尝试在当前代码上使用旧文件时,我得到了"Z"的异常。
对于 XmlSerializer,我们可以通过使用 XmlAttributeOverrides 来避免此问题。但是对于DataContractSerializer不知道如何处理这种情况。
请帮我整理一下。
线索在短语"数据契约"中。你不能随意破坏合同。如果你这样做,它将无法工作。现在,有一些灵活性...您通常可以对合同进行补充,只要您不关心只知道旧合同的人(所以即使这样也是可疑的)。但是,也许更好的选择是:
[EnumMemberAttribute, Obsolete("Use Y instead", true)]
Z
这仍然适用于DataContractSerializer
(尽管IIRC XmlSerializer
不喜欢它),但编译器将阻止您在常规代码中使用它。
如果完全删除Z
,则无法再处理任何提及Z
的已保存数据。