[英]XML Serializer and Deserializer class for different xml file
[英]Upgrading the serializer for an XML file
我正在修改遗留应用程序,该应用程序使用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
属性?
一种方法是使用XmlAttributeOverrides 。 它可以帮助您覆盖xml序列化。 希望能帮助到你。
XmlAttributeOverrides xmlAttributeOverrides = new XmlAttributeOverrides();
//Add overrides to xmlAttributeOverrides, use sample from internet
XmlSerializer serializer = new XmlSerializer(typeof(Data), XmlAttributeOverrides);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.