在序列化控件内容中添加额外数据作为注释

时间:2011-05-05 20:11:39

标签: c# serialization append

在我的C#WinForms中,我有一个树视图,我将TreeView的内容保存为序列化文件。这是我的代码:

序列化并保存

List<TreeNode> treeNode = new List<TreeNode>();

foreach (TreeNode node in treeViewFiles.Nodes)
{
    treeNode.Add(node);
}

//Serialize az binary
using (Stream file = File.Open(saveList.FileName, FileMode.Create))
{
    BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, treeNode);
}

DeSerialize并加载

BinaryFormatter bf = new BinaryFormatter();

object obj = bf.Deserialize(file); //file is path to file (came from openfiledialog
TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray();

//Add nodes to tree
treeViewFiles.Nodes.AddRange(nodeList);

问题

所以我现在有一个很好的保存和加载功能,但我需要的是将一些其他数据附加到同一个文件。例如,我想在同一个文件中添加一些字符串,当它们被加载时,会弹出一个消息框,并说明已保存此文件的用户的名称,以及其他一些内容。可能吗?欢迎任何提示和代码!

1 个答案:

答案 0 :(得分:3)

你正在考虑错误的方式。不要尝试向序列化文件添加注释,而只需创建一个新的可序列化类,其中包含您需要的额外信息,这些信息封装了您要序列化的数据,然后将其序列化。

例如

public class SavedData<T>{
  private List<T> _nodes;
  private DateTime _saveTime;

  public List<T> Nodes{
    get{ return _nodes;}
  }

  public DateTime SaveTime{
    get{return _saveTime;}
  }

  public SavedData(List<T> nodes, string savedBy){
    _nodes = nodes;
    _savedBy = savedBy;
    _saveTime = DateTime.Now;
  }
}

然后保存treenode而不是保存SavedData

BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, new SavedData<TreeNode>(treeNode));

我没有尝试编译其中任何一个,但它可能大部分是正确的....