C# 升级XML文件的序列化程序
我正在修改一个遗留应用程序,它使用C# 升级XML文件的序列化程序,c#,.net,xmlserializer,C#,.net,Xmlserializer,我正在修改一个遗留应用程序,它使用XmlSerializer将XML文件序列化/反序列化到一个类中。要求是在新的应用程序版本中更改某个属性,以便可以像以前一样加载旧文件,但下次应该保留升级的(更通用的)属性。下一次保存时,旧财产将被丢弃 为了更好地解释,文件的外观如下: <Data> <ImportantAnalysisResults> <ImportantAnalysisResult>...</ImportantAnalysisR
XmlSerializer
将XML文件序列化/反序列化到一个类中。要求是在新的应用程序版本中更改某个属性,以便可以像以前一样加载旧文件,但下次应该保留升级的(更通用的)属性。下一次保存时,旧财产将被丢弃
为了更好地解释,文件的外观如下:
<Data>
<ImportantAnalysisResults>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
</ImportantAnalysisResults>
</Data>
但这仍然会将旧属性保存回新文件中。下一次保存时,使ImportantAnalysisResults
消失的最佳方法是什么
是否有一种方法可以在加载时将旧属性“映射”到新的
结果属性?
一种方法是使用。它帮助您重写xml序列化。希望能有帮助
XmlAttributeOverrides xmlAttributeOverrides = new XmlAttributeOverrides();
//Add overrides to xmlAttributeOverrides, use sample from internet
XmlSerializer serializer = new XmlSerializer(typeof(Data), XmlAttributeOverrides);
谢谢,我刚刚在的MSDN页面中看到,它是在序列化或反序列化期间重写
XmlIgnore
的一种方法。如果我只能在序列化时忽略它,它可能会起作用。[XmlIgnore]属性用于忽略序列化和反序列化的对象成员(在两者上)。它不能被调整为只做一种方式。祝您好运。XmlAttributeOverrides
每个XmlSerializer
实例实例化一次。因此,如果我只在序列化时指定它,它在保存文件时只会忽略该属性。
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 xmlAttributeOverrides = new XmlAttributeOverrides();
//Add overrides to xmlAttributeOverrides, use sample from internet
XmlSerializer serializer = new XmlSerializer(typeof(Data), XmlAttributeOverrides);