2017-02-27 20 views
5

私は、ユーザが設定の一部として選択できるオプションを記述した列挙型を持っています。これはXMLにシリアライズされます。名前の1つが理想的ではなく、名前を変更したいが、古い設定ファイルの逆シリアル化もサポートしています。私は名前を変更したが、このように、以前のシリアル化された名前を指定することができます知っているXMLにシリアライズされたenumの名前を変更することはできますが、以前の名前をサポートし続けますか?

public enum Options 
{ 
    Odd, 
    NonOdd // rename to 'Even' 
} 

:たとえば

public enum Options 
{ 
    Odd, 
    [XmlEnum(Name = "NonOdd")] 
    Even 
} 

これは動作しますが、それはXMLファイルでNonOddを使用し続け、それは私がしたくないことです。

現在の名前と廃止予定の列挙名の逆シリアル化をサポートする方法はありますか?現在の名前にシリアル化しますか?

+1

[XmlElementフィールドの複数の名前を定義する方法](http://stackoverflow.com/questions/24707399/how-to-define-multiple-names-for-xmlelement-field) – CoolBots

+0

[ XmlElementフィールドの複数の名前を定義する方法?](http://stackoverflow.com/q/24707399/3744182)。残念ながら、未知のenum値に対して 'UnknownNode'、' UnknownElement'、 'UnknownAttribute'、' UnreferencedObject'イベントは発生していないようです。したがって、このソリューションはここでは機能しません。代わりに、新しい列挙値を持つ[XmlSerializer](http://stackoverflow.com/q/1621306/3744182)または[列挙値にXML値を逆シリアル化するときの余分な空間の処理](http://stackoverflow.com/a/)のソリューション31253230/3744182)が最善の方法かもしれません。 – dbc

答えて

1

は、ここで私はどうなるのかです:

  1. は、設定ファイルにバージョン番号を追加します。
  2. 古いバージョンのXMLファイルを現在のバージョンに変換するコードを記述します。
  3. enumを更新し、バージョン番号を増やしてください。

この構造を設定したら、必要な回数だけ列挙型要素の名前を変更できます。

+0

私はこれを他のアプリケーションで行っており、おそらく同じことを行うのが最善であることに同意します。 – JYelton

関連する問題