4

我正在对用于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有没有办法在加载时简单地将旧属性“映射”到新属性?

4

1 回答 1

1

一种方法是使用XmlAttributeOverrides。它可以帮助您覆盖 xml 序列化。希望能帮助到你。

XmlAttributeOverrides xmlAttributeOverrides = new XmlAttributeOverrides();

//Add overrides to xmlAttributeOverrides, use sample from internet

XmlSerializer serializer = new XmlSerializer(typeof(Data), XmlAttributeOverrides);
于 2012-11-14T17:02:43.680 回答