如果有一个配置文件里存储一些简单的配置
例如: x=1
y=2
那么大可直接存储在文件中读取到内存中的一张表中。
可是存储一张树状结构数据,例如一个带有深层菜单项的数据结构如何存储到配置文件中呢?而且也很容易的就能加载进来? 若想直接加载到内存中就是一个树状结构的数据结构,那么我能想到的最简单的方法就是序列化一棵树,而序列化的对象,我选择的是json数据 JsonFromTree就是这样一个程序,能够编辑一颗树,为每个节点添加各自属性并且导出成json文本数据。
逆序列化时的结构为
namespace TreeJsonGenerator
{
public class NodeData
{
/// <summary>
/// 子节点
/// </summary>
public List<NodeData> Items;
/// <summary>
/// 子节点属性值
/// </summary>
public Dictionary<String, String> key2value;
/// <summary>
/// 本节点的标识
/// </summary>
public String Name;
public NodeData()
{
this.Items = new List<NodeData>();
this.key2value=new Dictionary<string,string>();
}
}
public class NodeDataCollection
{
public List<NodeData> Nodes;
public NodeDataCollection()
{
this.Nodes = new List<NodeData>();
}
}
}
NodeDataCollection为序列化对象,导出的文件在程序中只需要下面段代码就可直接逆序列化,前提是.NET版本为3.5以上,若想在.NET2.0中使用逆序列化程序集请参考 Newtonsoft.NET
private NodeDataCollection load_from_file(String file)
{
System.IO.StreamReader reader = new StreamReader(file);
var temp= Deserialize<NodeDataCollection>(reader.ReadToEnd());
reader.Close();
return temp;
}
程序编辑界面如下所示
导出成的JSON数据内容
{
"Nodes": [
{
"Items": [
{
"Items": [
{
"Items": [],
"key2value": {
"pro": "3"
},
"Name": "节点3"
}
],
"key2value": {
"属性值1": "我是值"
},
"Name": "子节点1"
},
{
"Items": [],
"key2value": {
"属性2": "我也是值"
},
"Name": "子节点2"
}
],
"key2value": {},
"Name": "根节点1"
},
{
"Items": [
{
"Items": [],
"key2value": {
"属性值": "我是值"
},
"Name": "子节点1"
}
],
"key2value": {},
"Name": "根节点2"
}
]
}
当然程序保存时存在一些瑕疵,就是保存时需要先自己新建一个 例如 test.json 的空文件,然后再选中覆盖就能存储了。
源码地址 http://pan.baidu.com/s/1qWVKqRE
可执行文件地址 http://pan.baidu.com/s/1qWRa8Fi