1:在实际开发中,我们会经常使用到无限递归的情况,如菜单,父子级等的情况
2:Code
using System;using System.Collections.Generic;using ConsoleApp1.Models;using System.Linq;using Newtonsoft.Json;namespace ConsoleApp1{class Program{static void Main(string[] args){var allData = GetListData();var parentNode = allData.Where(p => p.PParentId == 0).ToList();List<PersonModel> tree = new List<PersonModel>();foreach (var item in parentNode){PersonModel p1 = new PersonModel { Children = new List<PersonModel> { } };int _id = item.ID;p1.ID = _id;p1.Pname = item.Pname;p1.Age = item.Age;p1.PParentId = item.PParentId;GetNewNodes(allData, p1);tree.Add(p1);}string jsonTree = JsonConvert.SerializeObject(tree, Formatting.Indented);Console.WriteLine(jsonTree);Console.ReadKey();}static void GetNewNodes(List<PersonModel> all, PersonModel curItem){var subItems = all.Where(c => c.PParentId == curItem.ID).ToList();curItem.Children = new List<PersonModel>();curItem.Children.AddRange(subItems);foreach (var subItem in subItems){GetNewNodes(all, subItem);}}static List<PersonModel> GetListData(){return new List<PersonModel> {new PersonModel{ID=1001,Age=68,Pname=\"QQ1\",PParentId=0 },new PersonModel{ID=1002,Age=78,Pname=\"ww\",PParentId=0 },new PersonModel{ID=1003,Age=67,Pname=\"dd\",PParentId=0 },new PersonModel{ID=1004,Age=88,Pname=\"ff\",PParentId=0 },new PersonModel{ID=1005,Age=18,Pname=\"gg\",PParentId=1001},new PersonModel{ID=1006,Age=16,Pname=\"cc\",PParentId=1003},new PersonModel{ID=1007,Age=17,Pname=\"aa\",PParentId=1006},new PersonModel{ID=1008,Age=19,Pname=\"tt\",PParentId=1007},new PersonModel{ID=1009,Age=20,Pname=\"ii\",PParentId=1004},new PersonModel{ID=1010,Age=22,Pname=\"ggf\",PParentId=1003}};}}}
3:测试ok截图