【发布时间】:2012-11-14 15:37:25
【问题描述】:
我正在对使用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 属性?
【问题讨论】:
标签: c# .net xmlserializer