若是有一个配置文件里存储一些简单的配置 json
例如: x=1 c#
y=2 数据结构
那么大可直接存储在文件中读取到内存中的一张表中。 this
但是存储一张树状结构数据,例如一个带有深层菜单项的数据结构如何存储到配置文件中呢?并且也很容易的就能加载进来? 若想直接加载到内存中就是一个树状结构的数据结构,那么我能想到的最简单的方法就是序列化一棵树,而序列化的对象,我选择的是json数据 JsonFromTree就是这样一个程序,可以编辑一颗树,为每一个节点添加各自属性而且导出成json文本数据。 spa
逆序列化时的结构为 code
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 的空文件,而后再选中覆盖就能存储了。 string
源码地址 http://pan.baidu.com/s/1qWVKqRE
可执行文件地址 http://pan.baidu.com/s/1qWRa8Fi