框架是使用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使用.的更多相关文章

  1. Delphi中根据分类数据生成树形结构的最优方法

    一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...

  2. C#生成树形结构泛型类

    C#生成树形结构泛型类,使用方法: ToTree<ShowMessageUpdatesTableTreeViewModel>.ToDo(models) public class ToTre ...

  3. 树形菜单的json字符串的拼接

    最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用js来遍历组成这个json字符串, 很好! 但是没看懂... var data = [ {&qu ...

  4. EasyUI_tree根据数据库数据生成树形结构JSON格式

    @Entitypublic class PubComp { @Id private String aguid; // 菜单ID private String pguid; // 父菜单 private ...

  5. EasyUI使用tree方法生成树形结构加载两次的问题

    html代码中利用class声明了easyui-tree,导致easyUI解析class代码的时候先解析class声明中的easyui-tree这样组件就请求了一次url:然后又调用js初始化代码请求 ...

  6. servlet+ajax+json字符串后台传入,前端解析并把数据循环填入表格实例

    写在前面:1.源代码来源于博客http://blog.sina.com.cn/u/2904067371 ,在此基础上对于前端代码稍作更改,把传过来的数据解析并传入表格2.json解析,用eval()3 ...

  7. 树形结构JSON的实现方法

    在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项.目前市场上常见的JavaScript框架及组件库中均包含自己的树 ...

  8. java中实现无限层级的树形结构

    本文展示了两个实现方法的代码.两个代码的实现方法不同,代码2更为简单. 先看一下最后实现的结果: 最后结果-json 代码1: 实现过程: 1.传入一段json字符串 2.将字符串转换成对象存入节点列 ...

  9. GridView 树形结构分组的功能

    在“会飞的鱼”博客中看到GridView实现树形结构的代码,经过修改,添加了树形结构中的复选框功能,欢迎吐槽. 源地址:http://www.cnblogs.com/chhuic/archive/20 ...

随机推荐

  1. greenDao 备注

    1.构建文件夹存放自动生成的代码,并在脚本中配置: sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/java-gen'] ...

  2. iOS开发系列--UITableView全面解析

    --UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是U ...

  3. 基础才是重中之重~Emit动态构建方法(参数和返回值)

    回到目录 对于Emit我们知道它的可以动态构建程序集,类型,方法,属性等,或者说只要手动使用C#创建的东西使用Emit也都可以动态创建它们,Emit由于它的特别之处,所以在很多领域得到了广泛的应用,像 ...

  4. jquery中on/delegate的原理

    jquery中on/delegate的原理 早期版本中叫delegate, 后来有过live函数,再后来统一用on.下面的方法等效: // jQuery 1.3 $(selector).(events ...

  5. CSS3学习总结3-3D与动画

    前言:这是篇CSS3中关于3D效果与动画相关的内容. (1)在CSS3的3D效果中,需要结合透视perspective的属性才能看到3d的效果,这个属性在屏幕上实现了元素近大远小的效果,所以要使用CS ...

  6. MyBatis参数绑定规则及原理分析

    MyBatis参数的传递有几种不同的方法,本文通过测试用例出发,对其中的方式进行总结和说明,并对其部分源码进行分析. 一.测试用例(环境参考之前博客SSM接口编程一文 http://www.cnblo ...

  7. test markdown

    Markdown和Haroopad介绍文档 [TOC "float:right"] 什么是Markdown Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John ...

  8. Distribution2:Distribution Writer

    Distribution Writer 调用Statement Delivery 存储过程,将Publication的改变同步到Subscriber中.查看Publication Properties ...

  9. WPF 浏览文件夹,获取其路径

    public void GetPath(System.Windows.Controls.TextBox TB) { FolderBrowserDialog FBD = new FolderBrowse ...

  10. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...