框架是使用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": []
            }
        ]
    }
]