生成树形结构的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 == -
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": []
}
]
}
]
生成树形结构的json字符串代码(c#)供前端angular tree使用.的更多相关文章
- Delphi中根据分类数据生成树形结构的最优方法
一. 引言: TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...
- C#生成树形结构泛型类
C#生成树形结构泛型类,使用方法: ToTree<ShowMessageUpdatesTableTreeViewModel>.ToDo(models) public class ToTre ...
- 树形菜单的json字符串的拼接
最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用js来遍历组成这个json字符串, 很好! 但是没看懂... var data = [ {&qu ...
- EasyUI_tree根据数据库数据生成树形结构JSON格式
@Entitypublic class PubComp { @Id private String aguid; // 菜单ID private String pguid; // 父菜单 private ...
- EasyUI使用tree方法生成树形结构加载两次的问题
html代码中利用class声明了easyui-tree,导致easyUI解析class代码的时候先解析class声明中的easyui-tree这样组件就请求了一次url:然后又调用js初始化代码请求 ...
- servlet+ajax+json字符串后台传入,前端解析并把数据循环填入表格实例
写在前面:1.源代码来源于博客http://blog.sina.com.cn/u/2904067371 ,在此基础上对于前端代码稍作更改,把传过来的数据解析并传入表格2.json解析,用eval()3 ...
- 树形结构JSON的实现方法
在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项.目前市场上常见的JavaScript框架及组件库中均包含自己的树 ...
- java中实现无限层级的树形结构
本文展示了两个实现方法的代码.两个代码的实现方法不同,代码2更为简单. 先看一下最后实现的结果: 最后结果-json 代码1: 实现过程: 1.传入一段json字符串 2.将字符串转换成对象存入节点列 ...
- GridView 树形结构分组的功能
在“会飞的鱼”博客中看到GridView实现树形结构的代码,经过修改,添加了树形结构中的复选框功能,欢迎吐槽. 源地址:http://www.cnblogs.com/chhuic/archive/20 ...
随机推荐
- DRY(Don't Repeat Yourself )原则
凡是写过一些代码的程序猿都能够意识到应该避免重复的代码和逻辑.我们通过提取方法,提取抽象类等等措施来达到这一目的.我们总能时不时的听到类似这样的话:”把这些公用的类放到shared项目去,别的项目还要 ...
- easyui datagrid cell title换行
" " title="' +row.TaskName + "
- 无法启用插件,因为它引起了一个致命错误(fatal error)。
关于wordpress不能启用某插件引发的错误,php 中 出错,Cannot redeclare wpb_getImageBySize().这个问题也是在我wordpress版本从v4.1生成v4. ...
- datagrid可编辑表格
使用datagrid对商品数量和单价进行修改 $(function() { var $dg = $("#zhong"); $dg.datagrid({ url : "ge ...
- jQuery 2.0.3 源码分析Sizzle引擎 - 词法解析
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 浏览器从下载文档到显示页面的过程是个复杂的过程,这里包含了重绘和重排.各家浏览器引擎的工作原理略有差别,但也有一定规则. 简 ...
- 深入理解定时器系列第二篇——被誉为神器的requestAnimationFrame
× 目录 [1]引入 [2]特点 [3]使用[4]兼容[5]应用 前面的话 与setTimeout和setInterval不同,requestAnimationFrame不需要设置时间间隔.这有什么好 ...
- ASP.NET WebAPi(selfhost)之文件同步或异步上传
前言 前面我们讲过利用AngularJs上传到WebAPi中进行处理,同时我们在MVC系列中讲过文件上传,本文结合MVC+WebAPi来进行文件的同步或者异步上传,顺便回顾下css和js,MVC作为客 ...
- 关于在Linux64位下安装xampp
网上关于这个主题的内容比较少,所以就写一下按装后的心得.之前一直在windows下用xampp,想在Linux下也体验一把,可是自己的Linux装的是64位的在XAMPP的官网上http://www. ...
- ELF静态链接
一直对ELF目标文件是怎样链接成可执行文件感到比较的疑惑,ELF文件里面的重定位段是怎样解决符号引用问题的?前几天偶然看了<深入理解计算机系统>里面讲了这个问题,看了之后对里面的实现机制终 ...
- 确保 PHP 应用程序的安全
开始之前在本教程中,您将学习如何在自己的 PHP Web 应用程序中添加安全性.本教程假设您至少有一年编写 PHP Web 应用程序的经验,所以这里不涉及 PHP 语言的基本知识(约定或语法).目标是 ...