JsonFromTree 树状结构导出到JSON数据的工具

   如果有一个配置文件里存储一些简单的配置

    例如: 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




转载于:https://my.oschina.net/000quanwei/blog/541225

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值