1、数据结构
public class Data { public string ID { get; set; } public string Name { get; set; } public string ParentId { get; set; } public List<Data> ChildData { get; set; } }
2、模拟数据
List<Data> list = new List<Data> { new Data { ID="1", Name="name1", ParentId="0", } , new Data { ID="2", Name="name2", ParentId="0", } , new Data { ID="3", Name="name3", ParentId="1", } , new Data { ID="4", Name="name4", ParentId="1", } , new Data { ID="5", Name="name5", ParentId="2", } , new Data { ID="6", Name="name6", ParentId="4", }, new Data { ID="7", Name="name7", ParentId="6", } };
4、对数据进行排序,目的是先加载父节点。
var listData = list.OrderBy(o => o.ParentId).ToList();
5、定义结果集合
List<Data> resList = new List<Data>();
6、for 循环遍历 或者foreach 遍历排序好的数据,生成树结构菜单
foreach (var item in listData) { if (item.ParentId == "0") { resList.Add(item); } else { //这个地方是 最难理解得地方,我一直在想如何找他们得父节点,就是想通过一层一层去找,这种想法就是错的, //正确得做法是只要让子节点加载到父节点,就可以了; var parent = listData.Where(x => x.ID == item.ParentId).FirstOrDefault(); if (parent.ChildData == null) { parent.ChildData = new List<Data>();W } parent.ChildData.Add(item); } }
7、序列化成json
var resJson = Newtonsoft.Json.JsonConvert.SerializeObject(resList);