生成树形结构的json字符串代码(c#)供前端angular tree使用.

时间:2021-03-21 08:34:16

框架是使用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 == -
select new FunctionInfoMapping
{
ID = a.FunctionId,
Title = a.FunctionName,
FunctionType = a.FunctionType,
ParentId = -,
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 == -))
{
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": []
}
]
}
]