gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:48:47 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com