在我的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);
问题
所以我现在有一个很好的保存和加载功能,但我需要的是将一些其他数据附加到同一个文件。例如,我想在同一个文件中添加一些字符串,当它们被加载时,会弹出一个消息框,并说明已保存此文件的用户的名称,以及其他一些内容。可能吗?欢迎任何提示和代码!
答案 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));
我没有尝试编译其中任何一个,但它可能大部分是正确的....