Loading

生成树形结构的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 == -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": []
            }
        ]
    }
]
复制代码
posted @ 2016-12-21 14:12  RuoVea  阅读(308)  评论(0编辑  收藏  举报