XmlSerializer
XMLファイルをクラスにシリアル化/逆シリアル化するために使用するレガシーアプリに変更を加えています。要件は、新しいアプリバージョンで特定のプロパティを変更して、以前と同じように古いファイルを読み込むことができるようにすることですが、アップグレードされた(より一般的な)プロパティは次回も保持する必要があります。その後、古いプロパティは次の保存時に破棄されます。
もう少し詳しく説明すると、ファイルの外観は次のようになります。
<Data>
<ImportantAnalysisResults>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
</ImportantAnalysisResults>
</Data>
新しいアプリのバージョンでは、ファイルが正しく読み込まれ、次の保存時に要素名が新しいものに置き換えられます。
<Data>
<Results>
<Result>...</Result>
<Result>...</Result>
<Result>...</Result>
</Results>
</Data>
<Data>
要素にはさらに多くのプロパティがありますが、これは変更する必要があるものです。また、ImportantAnalysisResult
から継承しResult
ます。
私のData
クラスでは、次のようなことを試みました。
class Data
{
[Obsolete("Used for backward compatibility. Use Results instead.")]
[XmlArrayItem("ImportantAnalysisResult", typeof(Result))]
public List<Result> ImportantAnalysisResults
{
get { return _results; }
}
public List<Result> Results
{
get { return _results; }
}
}
ただし、これでも古いプロパティが新しいファイルに保存されます。ImportantAnalysisResults
次の保存時に非表示にするための最良の方法は何 ですか?
Results
ロード中に古いプロパティを新しいプロパティに単純に「マップ」する方法はありますか?