首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c/s的treeview转换成json解决方案

2013-03-19 
c/s的treeview转换成json纠结在格式了现在能把所有节点取出来,但是 节点格式深度不会计算了。求高人。怎么来

c/s的treeview转换成json
c/s的treeview转换成json解决方案
纠结在格式了
现在能把所有节点取出来,但是 节点格式深度不会计算了。求高人。怎么来做深度!



        private void AllNode(TreeNode Node)
        {

                for (int i = 0; i < Node.Nodes.Count; i++)
                {
                    AllNode(Node.Nodes[i]);
                }
                if (Node.Name != "treZero")
                {
                    strJosn =strJosn+ """ + Node.Text + "":"" + Node.Tag + ""," ;
                }


        }

递归代码。。
[解决办法]
Node.Level就是节点深度
[解决办法]
简单的可以定义一个类似下面的类

public class SerializeNode
{
  public string Name{get;set;}
  List<SerializeNode> Nodes{get;}
}


赋值后直接用Json.Net序列化和反序列化即可
[解决办法]
直接上代码吧。


  public class Tree
    {
        /// <summary>
        /// 树的深度
        /// </summary>
        public int Depth { get; set; }
        /// <summary>
        /// 根结点
        /// </summary>
        public TreeNode Root { get; set; }

        public void AddNode(int parentId, TreeNode insert)
        {
            var parent = FindNode(Root, parentId);
            if (parent == null) return;
            insert.Level = parent.Level + 1;//深度加1
            //在叶子结点下插入
            if (parent.Children == null)
            {
                parent.Children = new List<TreeNode>();


                if (insert.Level > this.Depth)
                {
                    this.Depth = insert.Level;//更新树的深度
                }
            }
            parent.Children.Add(insert);
        }
        public TreeNode FindNode(TreeNode root, int id)
        {
            if (root != null)
            {
                if (root.Id == id) return root;
                if (root.Children != null && root.Children.Count > 0)
                {
                    foreach (var node in root.Children)
                    {
                        return FindNode(node, id);
                    }
                }
            }
            return null;
        }

    }
    public class TreeNode
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Level { get; set; }
        public List<TreeNode> Children { get; set; }
    }



 public string ToJsJson(object item)
        {
            var serializer = new DataContractJsonSerializer(item.GetType());
            using (var ms = new MemoryStream())
            {
                serializer.WriteObject(ms, item);
                var sb = new StringBuilder();
                sb.Append(Encoding.UTF8.GetString(ms.ToArray()));


                return sb.ToString();
            }
        }




Tree tree = new Tree() { Root = new TreeNode { Id = 1, Name = "中国", Level = 1 }, Depth = 1 };
            TreeNode node = new TreeNode() { Id = 2, Name = "湖北省" };
            tree.AddNode(1, node);
            TreeNode node1 = new TreeNode() { Id = 3, Name = "河南省" };
            tree.AddNode(1, node1);
            TreeNode node2 = new TreeNode() { Id = 4, Name = "河北省" };
            tree.AddNode(1, node2);
            TreeNode node3 = new TreeNode() { Id = 4, Name = "武汉市" };
            tree.AddNode(2, node3);
            string json = ToJsJson(tree.Root);

热点排行