生成树形结构的json字符串代码.

框架是使用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": []
            }
        ]
    }
]
时间: 2024-10-10 07:43:23

生成树形结构的json字符串代码.的相关文章

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

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

C#生成树形结构泛型类

C#生成树形结构泛型类,使用方法: ToTree<ShowMessageUpdatesTableTreeViewModel>.ToDo(models) public class ToTree<T> where T : IToTreeModel { public static List<T> ToDo(List<T> models) { var dtoMap = new Dictionary<int, T>(); foreach (var item

递归生成树形结构

原文地址:https://blog.csdn.net/q13965211/article/details/80772544 节点树树形结构 Tree 结构 import java.util.List; /** * @Author fanwei * @date 2018-6-13 17:04 */ public class TreeNode { private Integer key; private String title; private Integer parentId; private

级联数据生成树形结构

原文地址:https://www.cnblogs.com/newlangwen/p/9969904.html Tree 结构 public class TreeNode { private Integer key; private String title; private Integer parentId; private List<TreeNode> children; public Integer getKey() { return key; } public String getTit

TreeView生成树形结构

1.表结构内容 2.代码 public void InitData() { using (var db = new HJSDR_BJXH_20170303_TESTEntities()) { pyFiles = new PyFiles(); TreeNode rootNode = null; TreeNode typeNode = null; foreach (var item in db.ED_KPI_INFO) { if (!tv_singal.Nodes.ContainsKey(item.

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

html代码中利用class声明了easyui-tree,导致easyUI解析class代码的时候先解析class声明中的easyui-tree这样组件就请求了一次url:然后又调用js初始化代码请求一次url.这样导致了重复加载,解决的方法就是只用一种初始化方法来声明easyUI组件以避免重复的提交请求,即删除html中的class声明(class="easyui-tree"): 加载两次的写法: <div class="easyui-panel" styl

利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法)

一.问题研究的背景和意义 目前在Web应用程序开发领域,Ext JS框架已经逐渐被广泛使用,它是富客户端开发中出类拔萃的框架之一.在Ext的UI控件中,树形控件无疑是最为常用的控件之一,它用来实现树形结构的菜单.TreeNode用来实现静态的树形菜单,AsyncTreeNode用来实现动态的异步加载树形菜单,后者最为常用,它通过接收服务器端返回来的JSON格式的数据,动态生成树形菜单节点.动态生成树有两种思路:一种是一次性生成全部树节点,另一种是逐级加载树节点(利用AJAX,每次点击节点时查询下

如何生成树形文件目录结构

一.生成树形结构的目录 如下形式:E:.│  .buildpath│      ├─attachment│  │  image-not-exist.gif│  │  readme│  │  │  ├─2014│  │  ├─01│  │  │  ├─01│  │  │  ├─02│  │  │  ├─03 方法:用MS-Dos下的tree命令 1.在windows中打开命令行窗口 2.进入你想要列出目录下面 [cd E:\Develop\SourceCode] 3.命令提示符下运行 tree /

easyUI树形结构

树形结构是常见也是常用的,之前一直在使用但是基本都是调用别人写好的方法,好像也没调用太明白的感觉,这次在开发ITOO的时候终于研究了一番,发现其实要实现树形结构其实不是一件困难的事,而且实现方法也不是唯一的,之前大家都很倾向使用zTree,网上搜了一下发现zTtree是一个比较强大"树插件"但是觉得对于目前的我来说并不是很合适,首先我们的前台框架使用的easyUI,easyUI有自己的树形结构控件,再引入一个zTree没有多大的必要:而且对于我来说相对于js代码来说我更熟悉使用后台ja