目录
项目预览
新建控制台测试项目,在桌面上生成自定义树的json文件。
运行结果
桌面生成的tree.json文件
项目代码
using Newtonsoft.Json;
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
Tree.Test();
}
}
/// <summary>
/// 自定义树
/// </summary>
public class Tree
{
/// <summary>
/// 根节点
/// </summary>
public TreeNode RootNode { get; set; }
/// <summary>
/// 通过节点列表生成一棵树
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static Tree Generate(List<TreeNode> list)
{
foreach (var node1 in list)
{
foreach (var node2 in list)
{
if (node1.Id == node2.PId)
{
node1.Children.Add(node2);
}
}
}
var allIds = list.Select(x => x.Id).ToList();
var rootNodeList = list.Where(x => !allIds.Contains(x.PId));
if (rootNodeList.Count() == 1)
{
var tree = new Tree()
{
RootNode = rootNodeList.First(),
};
return tree;
}
else
{
throw new Exception("根节点不唯一");
}
}
/// <summary>
/// 测试
/// </summary>
public static void Test()
{
var nodeList = new List<TreeNode>()
{
new TreeNode()
{
Id = "0",
PId = "",
Text = "根",
},
new TreeNode()
{
Id = "1",
PId = "0",
Text = "1",
},
new TreeNode()
{
Id = "11",
PId = "1",
Text = "1-1",
},
new TreeNode()
{
Id = "111",
PId = "11",
Text = "1-1-1",
},
new TreeNode()
{
Id = "112",
PId = "11",
Text = "1-1-2",
},
new TreeNode()
{
Id = "2",
PId = "0",
Text = "2",
},
new TreeNode()
{
Id = "21",
PId = "2",
Text = "2-1",
},
new TreeNode()
{
Id = "22",
PId = "2",
Text = "2-2",
},
};
var res = Generate(nodeList);
var json = JsonConvert.SerializeObject(res);
File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "tree.json"), json);
}
}
/// <summary>
/// 节点类
/// </summary>
public class TreeNode
{
public string Text { get; set; } = string.Empty;
public string Id { get; set; } = string.Empty;
public string PId { get; set; } = string.Empty;
public List<TreeNode> Children { get; set; } = new List<TreeNode>();
}
}