DataContractSerializer和枚举问题

时间:2012-06-06 09:38:18

标签: c# datacontractserializer

我正在使用DataContractSerializer。我的旧版本枚举如下

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

    [EnumMemberAttribute]
    Y,

    [EnumMemberAttribute]
    Z
}

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

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

请帮我解决。

1 个答案:

答案 0 :(得分:1)

线索在“数据合同”一词中。你不能随意破坏合同。如果你这样做它将无效。现在,有一些灵活性......你通常可以添加合同,只要你不关心只知道旧合同的人(所以即使这是可疑的)。但是,也许更好的选择是:

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

这将仍然有效 DataContractSerializer(尽管IIRC XmlSerializer不喜欢它),但编译器会阻止您在常规代码中使用它。

如果您完全摆脱Z,则无法再处理提及Z的任何已保存数据。