ASP.NET 如何将Lambd式查询结果转换成带树结构(children)的JSON

为爱打拼 2020-09-21 11:52:06
目的,是要把查询后的JSON转换成树结构的菜单.
数据库的菜单结构如下:
AuthID AuthName ParentID type AuthUrl Icon
1 系统管理 0 menu /System/UserInfoList 
2 用户管理 1 menu /System/UserInfoList 
3 菜单管理 1 menu /System/GetMenuList 
4 采购管理 0 menu /System/GetMenuList 
5 采购申请 4 menu /System/GetMenuList 

#region 获取菜单权限列表信息
public ActionResult GetMenu()
{
//查询所有菜单数据
var AuthorizeInfo = authorize.Select(u => true);
var tempdata = from a in AuthorizeInfo
select new
{
Authid=a.AuthID,
ParentID = a.ParentID,
title = a.AuthName,
href = a.AuthUrl,
icon = a.Icon,
spread=false,
children=a.ParentID

};

return Json(tempdata, JsonRequestBehavior.AllowGet);
}
#endregion
查询后,得到的JSON格式为:
[{"Authid":1,"ParentID":0,"title":"系统管理","href":"/System/UserInfoList","icon":"\u0026#xe716;","spread":false,"children":0},{"Authid":2,"ParentID":1,"title":"用户管理","href":"/System/UserInfoList","icon":"\u0026#xe770;","spread":false,"children":1},{"Authid":3,"ParentID":1,"title":"菜单管理","href":"/System/GetMenuList","icon":"\u0026#xe66b;","spread":false,"children":1},{"Authid":4,"ParentID":0,"title":"采购管理","href":"/System/GetMenuList","icon":"\u0026#xe657;","spread":false,"children":0},{"Authid":5,"ParentID":4,"title":"采购申请","href":"/System/GetMenuList","icon":"\u0026#xe657;","spread":false,"children":4}]

我想要的json格式为:
[
{
"title": "系统管理",
"icon": "",
"href": "",
"spread": false,
"children": [
{
"title": "用户管理",
"icon": "",
"href": "/System/UserInfoList",
"spread": false
},
{
"title": "菜单管理",
"icon": "",
"href": "/System/GetMenuList",
"spread": false
}
]

}
]
这里带不出children下面的节点关系
求各位大神帮忙一下,谢谢
...全文
534 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
为爱打拼 2020-09-21
  • 打赏
  • 举报
回复
谢谢二楼ourhouzi,已找到解决方法了,我把查询条件改了一下,就可成树型结构显示了 #region 获取菜单权限列表信息 public ActionResult GetMenu() { //查询所有菜单数据 var AuthorizeInfo = authorize.Select(u => true); var tempdata = from a in AuthorizeInfo where a.ParentID==0 select new { Authid = a.AuthID, ParentID = a.ParentID, title = a.AuthName, href = a.AuthUrl, icon = a.Icon, spread = false, children = from t in AuthorizeInfo where t.ParentID == a.AuthID select new { title = t.AuthName, href = t.AuthUrl, icon = t.Icon, spread = false, } }; return Json(tempdata, JsonRequestBehavior.AllowGet); } #endregion 加了这一个条件,只显示一级根目录,0表示根目录 where a.ParentID==0 下面这一句表示:根目录下所有的子节点查询 children = from t in AuthorizeInfo where t.ParentID == a.AuthID select new { title = t.AuthName, href = t.AuthUrl, icon = t.Icon, spread = false, } 如下图所示:
ourhouzi 2020-09-21
  • 打赏
  • 举报
回复
一般来说是你先取出一个list 数据,然后通过递归获取树形结构

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧