是否有一个很好的解决方案与版本信息持久化状态(因为不同的发布应用程序可能有一些变化的状态对象)

本文关键字:状态 应用程序 可能有 对象 变化 因为 解决方案 很好 有一个 版本 信息 | 更新日期: 2023-09-27 18:10:36

我想将项目的状态保存到磁盘,并在下次重新打开项目时恢复状态。

。有一个ViewState类用于状态

//Version 1:
class ViewState
{
 public string ID{get;set;}
 public string CheckedSomeState{get;set;}
 public string ToRemoved{get;set;}// will removed in version2
 public string ToRenamed{get;set;}// will renamed in version2
}
//Version 2:
class ViewState
{
 public string ID{get;set;}
 public string CheckedSomeState{get;set;}
 public string NewStateVersion2{get;set;}//new in version2
 public string ToRenamedNewNameVersion2{get;set;}
}
//Version 3:
...

问题:我想用xml序列化器将ViewState序列化成xml文件。当'ViewState'被更改时的向后兼容性。(APP版本2可以打开的文件由APP版本1生成)

我有一个主意:使用'ViewState'项目的一些属性来标记新版本中的更改(如果有一些更改)。和自定义xml序列化器来持久化'ViewState'。如:

//Version 2:
class ViewState
{
 public string ID{get;set;}
 public string CheckedSomeState{get;set;}
 [New]
 public string NewStateVersion2{get;set;}
 //[Removed]
 //public string ToRemoved{get;set;}
 [Rename(OldName="ToRenamed",NewName="ToRenamedNewNameVersion2")]
 public string ToRenamedNewNameVersion2{get;set;}
}

对于这种情况是否有其他好的解决方案

是否有一个很好的解决方案与版本信息持久化状态(因为不同的发布应用程序可能有一些变化的状态对象)

您也可以创建一个属性字典或列表,并添加XML序列化属性,例如:

using System.Xml.Serialization;    
[XmlRootAttribute("ViewState")]
class ViewState
{
   [XmlAttribute("ID")
   public string ID { get; set; }
   [XmlArray("Attributes")]
   [XmlArrayItem("Attribute")]
   public List<Attribute> Attributes { get; set; }
}
[XmlRootAttribute("Attribute")]
class Attribute
{
   [XmlAttribute("Key")]
   public string Key { get; set; }
   [XmlAttribute("Value")]
   public string Value { get; set; }
}

然后你可以很容易地访问你所有的状态属性