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 + ""," ;
}
}
public class SerializeNode
{
public string Name{get;set;}
List<SerializeNode> Nodes{get;}
}
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);