我正在使用DataContractSerializer。我有下面的旧版本的枚举
[DataContract]
public Enum Foo
{
[EnumMemberAttribute]
X,
[EnumMemberAttribute]
Y,
[EnumMemberAttribute]
Z
}我几乎没有使用“Z”的文件。现在,在最新版本中,我从枚举中删除了“Z”。但是,当我试图在当前代码中使用这些旧文件时,我会得到'Z‘的一个例外。
对于XmlSerializer,我们可以通过使用XmlAttributeOverrides来避免这个问题。但是对于DataContractSerializer来说,不知道如何处理这种情况。
请帮我整理一下。
发布于 2012-06-06 09:49:52
线索在“数据合同”一词中。你不能随便违反合同。如果你那样做,就不能工作了,。现在,有一些灵活性..。只要你不关心那些只知道旧合同的人,你通常可以对合同做一些补充(所以即使这也是可疑的)。然而,也许更好的选择是:
[EnumMemberAttribute, Obsolete("Use Y instead", true)]
Z这将使仍然与DataContractSerializer一起工作(尽管IIRC XmlSerializer不喜欢它),但是编译器将停止在常规代码中使用它。
如果您完全摆脱了Z,您就不能再处理任何提到Z的保存的数据。
https://stackoverflow.com/questions/10911659
复制相似问题