1

我正在使用 DataContractSerializer。我在旧版本中有枚举,如下所示

[DataContract]
public Enum Foo
{
    [EnumMemberAttribute]
    X,

    [EnumMemberAttribute]
    Y,

    [EnumMemberAttribute]
    Z
}

我很少有使用“Z”的文件。现在在最新版本中,我从枚举中删除了“Z”。但是当我尝试在当前代码上使用这些旧文件时,我得到了“Z”的异常。

对于 XmlSerializer,我们可以通过使用 XmlAttributeOverrides 来避免这个问题。但是对于 DataContractSerializer 不知道如何处理这种情况。

请帮我整理一下。

4

1 回答 1

1

线索在短语“数据合同”中。你不能随意违约。如果你这样做,它就行不通。现在,有一些灵活性......你通常可以对合同进行补充,只要你不关心只知道旧合同的人(所以即使这也是可疑的)。但是,也许更好的选择是:

[EnumMemberAttribute, Obsolete("Use Y instead", true)]
Z

仍然可以使用DataContractSerializer(尽管 IIRCXmlSerializer不喜欢它),但编译器会阻止您在常规代码中使用它。

如果您完全摆脱Z,您将无法再处理任何已保存的提及Z.

于 2012-06-06T09:49:52.327 回答