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);