若是有一個配置文件裏存儲一些簡單的配置 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