生成树形结构的json字符串代码(c#)供前端angular tree使用.
框架是使用EF6.0.可以针对返回的值使用Newtonsoft.Json.dll(百度搜一下)来对返回的值序列化为json字符串,如果对以下值那就是使用JsonConvert.SerializeObject(functionTree),啥都不说,上实例代码
/// <summary> /// init tree /// </summary> /// <returns></returns> public List<FunctionInfoMapping> LoadTree() { List<FunctionInfoMapping> listTree = InitTree(); return listTree; //return JsonConvert.SerializeObject(list); } /// <summary> /// init tree find top menu /// </summary> /// <returns></returns> private List<FunctionInfoMapping> InitTree() { RightsContext rightContext = new RightsContext(); var treeList = (from a in db.FunctionInfoes join b in db.FunctionInfoes on a.ParentId equals b.FunctionId select new FunctionInfoMapping { ID=a.FunctionId, Title=a.FunctionName, FunctionType=a.FunctionType, ParentId=b.FunctionId, ParentName=b.FunctionName, FunctionPath=a.FunctionPath, Description=a.Description, SortId=a.SortId, }).Union (from a in db.FunctionInfoes where a.ParentId == -1 select new FunctionInfoMapping { ID = a.FunctionId, Title = a.FunctionName, FunctionType = a.FunctionType, ParentId = -1, ParentName = "", FunctionPath = a.FunctionPath, Description = a.Description, SortId = a.SortId, }); var newTree = treeList.Union(treeList); //List<FunctionInfoMapping> reeList= treeList.ToList<FunctionInfoMapping>() List < FunctionInfoMapping > rootNode = new List<FunctionInfoMapping>(); foreach (var plist in newTree.Where(t => t.ParentId == -1)) { FunctionInfoMapping node = new FunctionInfoMapping(); node.ID = plist.ID; node.Title = plist.Title; node.FunctionType = plist.FunctionType; node.ParentId = plist.ParentId; node.ParentName = plist.ParentName; node.FunctionPath = plist.FunctionPath; node.Description = plist.Description; node.SortId =plist.SortId; node.Nodes = CreateChildTree(newTree.AsQueryable<FunctionInfoMapping>(), node); rootNode.Add(node); } return rootNode; } /// <summary> /// recursive /// </summary> /// <param name="TreeList"></param> /// <param name="jt"></param> /// <returns></returns> private List<FunctionInfoMapping> CreateChildTree(IQueryable<FunctionInfoMapping> TreeList, FunctionInfoMapping parentId) { int keyid = parentId.ID;//root id List<FunctionInfoMapping> nodeList = new List<FunctionInfoMapping>(); var children = TreeList.Where(t => t.ParentId == keyid); foreach (var chl in children) { FunctionInfoMapping node = new FunctionInfoMapping(); node.ID = chl.ID; node.Title = chl.Title; node.FunctionType = chl.FunctionType; node.ParentId = chl.ParentId; node.ParentName = chl.ParentName; node.FunctionPath = chl.FunctionPath; node.Description = chl.Description; node.SortId = chl.SortId; node.Nodes = CreateChildTree(TreeList, node); nodeList.Add(node); } return nodeList; }
返回的结构如下
[ { "id": 2, "title": "Fundamental", "functiontype": 1, "parentId": -1, "parentname": "", "functionpath": "/Html/Fundamental", "description": "fundamental menu link", "sortid": 0, "nodes": [] }, { "id": 3, "title": "Auth Manager", "functiontype": 1, "parentId": -1, "parentname": "", "functionpath": "/Html/Auth", "description": " auth manager link ", "sortid": 0, "nodes": [ { "id": 4, "title": "Role Manager", "functiontype": 2, "parentId": 3, "parentname": "Auth Manager", "functionpath": "/Html/Auth/roles.html", "description": " roles manager page ", "sortid": 0, "nodes": [ { "id": 10, "title": "Add Role", "functiontype": 3, "parentId": 4, "parentname": "Role Manager", "functionpath": null, "description": null, "sortid": 0, "nodes": [] }, { "id": 12, "title": "Delete role", "functiontype": 3, "parentId": 4, "parentname": "Role Manager", "functionpath": null, "description": null, "sortid": 0, "nodes": [] } ] }, { "id": 5, "title": "Page Manager", "functiontype": 2, "parentId": 3, "parentname": "Auth Manager", "functionpath": "/Html/Auth/pages.html", "description": "pages permission manager page", "sortid": 0, "nodes": [] } ] } ]