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(IIRCはそれを好みXmlSerializerませんが)、コンパイラーは通常のコードでの使用を停止します。

完全に削除Zすると、に言及している保存済みデータを処理できなくなりますZ

于 2012-06-06T09:49:52.327 に答える