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

标签 c# .net xmlserializer

我正在修改使用 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);

关于c# - 升级 XML 文件的序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13381979/

相关文章:

c# - 制作基于 LINQ 的解决方案,以确定一组谓词是否满足受一组不变量约束的一对集合

c# - 为什么 Enumerable.Range 比直接 yield 循环更快?

c# - WPF MVVM自动GUI测试-代码覆盖率

c# - 检测是否显示工具提示?

.net - 是否有在控制台(文本模式)中绘制表格的任何 .NET 库?

c# - 在具有命名空间前缀的元素内创建不带命名空间前缀的 XML 元素

C# XML 序列化覆盖 IXmlSerializable 类的类型

c# - ASP.NET MVC。 Ajax.BeginForm OnSuccsess 找不到 javascript 函数

.net - Look around 未通过 .net 提供预期结果

c# - XmlSerializer 在反序列化时抛出异常