微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 升级XML文件的序列化程序

我正在修改遗留应用程序,该应用程序使用XmlSerializer将 XML文件序列化/反序列化为类.要求是更改新应用程序版本中的某个属性,以便可以像以前一样加载旧文件,但下次应该保留升级(更一般)的属性.旧财产将在下次保存时被抛弃.

为了更好地解释它,这是文件的外观:

<Data>
   <ImportantAnalysisResults>
        <ImportantAnalysisResult>...</ImportantAnalysisResult>
        <ImportantAnalysisResult>...</ImportantAnalysisResult>
        <ImportantAnalysisResult>...</ImportantAnalysisResult>
   </ImportantAnalysisResults>
</Data>

新的应用程序版本应该正确加载文件,并在下次保存时用新的替换元素名称

<Data>
   <Results>
        <Result>...</Result>
        <Result>...</Result>
        <Result>...</Result>
   </Results>
</Data>

<数据> element有更多属性,但这是需要更改的属性.此外,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; }
    }
}

但是这仍然会将旧属性保存回新文件中.什么是使重要分析结果在下次保存时消失的最佳方法

有没有办法在加载时简单地将旧属性“映射”到新的Results属性

解决方法

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

XmlAttributeOverrides xmlAttributeOverrides = new XmlAttributeOverrides();

//Add overrides to xmlAttributeOverrides,use sample from internet

XmlSerializer serializer = new XmlSerializer(typeof(Data),XmlAttributeOverrides);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐