我正在修改遗留应用程序,该应用程序使用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; } } }
解决方法
一种方法是使用
XmlAttributeOverrides.它可以帮助您覆盖xml序列化.希望能帮助到你.
XmlAttributeOverrides xmlAttributeOverrides = new XmlAttributeOverrides(); //Add overrides to xmlAttributeOverrides,use sample from internet XmlSerializer serializer = new XmlSerializer(typeof(Data),XmlAttributeOverrides);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。