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

C# 在序列化控件内容中添加额外数据作为注释,c#,serialization,append,C#,Serialization,Append,在我的C#WinForms中,我有一个treeview,我将treeview的内容保存为一个序列化文件。这是我的密码: 序列化并保存 List<TreeNode> treeNode = new List<TreeNode>(); foreach (TreeNode node in treeViewFiles.Nodes) { treeNode.Add(node); } //Serialize az binary using (Stream file = Fil

在我的C#WinForms中,我有一个treeview,我将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);
}
List treeNode=new List();
foreach(treeViewFiles.Nodes中的TreeNode节点)
{
添加(节点);
}
//序列化az二进制文件
使用(Stream file=file.Open(saveList.FileName,FileMode.Create))
{
BinaryFormatter bf=新的BinaryFormatter();bf.Serialize(文件,treeNode);
}
反序列化并加载

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);
BinaryFormatter bf=new BinaryFormatter();
object obj=bf.反序列化(文件)//文件是文件的路径(来自openfiledialog
TreeNode[]节点列表=(对象为IEnumerable).ToArray();
//将节点添加到树中
treeViewFiles.Nodes.AddRange(节点列表);
问题


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

您的想法是错误的。与其尝试向序列化文件添加注释,不如创建一个新的可序列化类,该类包含所需的额外信息,用于封装要序列化的数据,然后序列化该数据

比如说

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;
  }
}
公共类存储数据{
私有列表节点;
私人日期时间(saveTime);;
公共列表节点{
获取{返回_节点;}
}
公共日期时间保存时间{
获取{return\u saveTime;}
}
公共SavedData(列表节点,字符串savedBy){
_节点=节点;
_savedBy=savedBy;
_saveTime=DateTime.Now;
}
}
然后,不保存treenode,而是保存一个SavedData

BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, new SavedData<TreeNode>(treeNode));
BinaryFormatter bf=newbinaryFormatter();bf.Serialize(文件,新的SavedData(treeNode));

我没有试过编译这些内容,但可能大部分都是对的……

谢谢,是的,我想我的想法是错误的!我很快就会尝试。现在你能告诉我字段前的下划线是什么吗?这只是我们在工作中使用的编码标准-它表示私有字段。这只是一种快速了解工作内容的方法这是全班的私事。