C#数据序列化应用:BinaryFormatter序列化某个treeNode下的一级树节点
2011-04-23 14:54
691 查看
在学过了C#序列化的基础知识后,我果断把他用到我正在写的一个地址簿软件中。
在我地址簿里有一个treeview,我的设计是两层的,最外层是两个根节点,然后各根节点下面可以创建一级子节点。
刚开始的时候我在网上看到一些高人把正棵树都序列了,就是达到了通用性——代码对于任何树都可以实现序列化。代码有点多,需要有点耐心才能啃下来。(我耐心不是很好 T_T )所以我决定就针对我自己这个简单的树结构自己写个针对某个节点的下的所有一级节点进行序列。
就相当于我只要对我自己两个根节点下的子节点序列就可以了,于是我写了一个TreeNodes类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms; //这里我直接调用了窗体控件空间,这样我就可以使用系统TreeNode类了,哈哈
namespace treeview
{
[Serializable]
class TreeNodes
{
private TreeNode[] tn; //这里我就声明了系统的TreeNode类的数组,把那某个节点下的一级节点都保存进去
public TreeNodes(TreeNode treenode) //构造函数就是把一级节点保存到数组里了呢
{
tn = new TreeNode[treenode.Nodes.Count];
for (int i = 0; i < treenode.Nodes.Count; i++)
{
tn[i] = treenode.Nodes[i];
}
}
public void setTreeNodes(TreeNode treenode) //这个函数就是把数组里节点加到某个节点下,反序列时候用的
{
for (int i = 0; i < tn.Length; i++)
{
treenode.Nodes.Add(tn[i]);
}
}
}
}
//这个类是不是很简单。
序列化:(把子节点存到类里就可以序列化了)
try
{
TreeNodes tns = new TreeNodes(this.treeView1.Nodes[0]);
FileStream fs = new FileStream("root.bin", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, tns);
fs.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
反序列化:
try
{
if (File.Exists("root.bin"))
{
FileStream fs = new FileStream("root.bin", FileMode.Open, FileAccess.Read);
BinaryFormatter bf = new BinaryFormatter();
TreeNodes tns0 = (TreeNodes)bf.Deserialize(fs);
tns0.setTreeNodes(this.treeView1.Nodes[0]);
fs.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
在我地址簿里有一个treeview,我的设计是两层的,最外层是两个根节点,然后各根节点下面可以创建一级子节点。
刚开始的时候我在网上看到一些高人把正棵树都序列了,就是达到了通用性——代码对于任何树都可以实现序列化。代码有点多,需要有点耐心才能啃下来。(我耐心不是很好 T_T )所以我决定就针对我自己这个简单的树结构自己写个针对某个节点的下的所有一级节点进行序列。
就相当于我只要对我自己两个根节点下的子节点序列就可以了,于是我写了一个TreeNodes类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms; //这里我直接调用了窗体控件空间,这样我就可以使用系统TreeNode类了,哈哈
namespace treeview
{
[Serializable]
class TreeNodes
{
private TreeNode[] tn; //这里我就声明了系统的TreeNode类的数组,把那某个节点下的一级节点都保存进去
public TreeNodes(TreeNode treenode) //构造函数就是把一级节点保存到数组里了呢
{
tn = new TreeNode[treenode.Nodes.Count];
for (int i = 0; i < treenode.Nodes.Count; i++)
{
tn[i] = treenode.Nodes[i];
}
}
public void setTreeNodes(TreeNode treenode) //这个函数就是把数组里节点加到某个节点下,反序列时候用的
{
for (int i = 0; i < tn.Length; i++)
{
treenode.Nodes.Add(tn[i]);
}
}
}
}
//这个类是不是很简单。
序列化:(把子节点存到类里就可以序列化了)
try
{
TreeNodes tns = new TreeNodes(this.treeView1.Nodes[0]);
FileStream fs = new FileStream("root.bin", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, tns);
fs.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
反序列化:
try
{
if (File.Exists("root.bin"))
{
FileStream fs = new FileStream("root.bin", FileMode.Open, FileAccess.Read);
BinaryFormatter bf = new BinaryFormatter();
TreeNodes tns0 = (TreeNodes)bf.Deserialize(fs);
tns0.setTreeNodes(this.treeView1.Nodes[0]);
fs.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
相关文章推荐
- BinaryFormatter序列化与反序列化(C#)
- c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)
- 关于EXTJS 树(tree)的demo包括AsyncTreeNode 加载数据
- PHP、Java、C#实现URI参数签名算法,确保应用与REST服务器之间的安全通信,防止Secret Key盗用、数据篡改等恶意攻击行为
- 利用 WM_COPYDATA 消息 在 C# 和 传统C++应用之间传递数据时,64位平台的问题
- C#程序中:如何修改xml文件中的节点(数据)
- C# xml文件读取节点写入数据
- 父子关系的节点进行排成Tree所需的数据
- C#中右击弹出快捷菜单时对应的当前所右击的TreeNode
- c# sql数据分页的应用
- c#序列化BinaryFormatter和XmlFormatter的区别
- C# 自定义数据类型 数组应用 读取XML
- extjs4.0 treepanel节点的选中、展开! 数据的重新加载! checked树
- 如何用Google APIs和Google的应用系统进行集成(7)----在把JSON转换成XML数据过程中,JSON数据中包含违背XML数据规范:XML节点名不支持数字的Java解决方案
- 数据序列化处理之经验积累(1)-BinaryFormatter
- TreeView插入节点的方法:TreeNodeCollection.Insert 方法 (Int32, TreeNode)
- easyui _tree的一级子节点节点添加
- 水晶易表调用C#的WebService,返回数据集合的应用分析
- C#中序列化的应用
- C# TreeView AfterSelect事件 从节点中获取所需数据