C# 构造tree菜单工具方法

如何构造tree数据结构,做个笔记,方便查阅,本方法是直接返回json字符串:

1private string ToMenuJson(List<Model> data, string parentId) 2 { 3 var sbJson = new StringBuilder(); 4 sbJson.Append("["); 5 var entitys = data.FindAll(t => t.ParentID == parentId).ToList(); 6 if (entitys.Count > 0) 7 { 8 foreach (var item in entitys) 9 { 10 var strJson = JsonConvert.SerializeObject(item, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }); 11 strJson = strJson.Insert(strJson.Length - 1, ",\"ChildNodes\":" + ToMenuJson(data, item.ID) + ""); 12 sbJson.Append(strJson + ","); 13 } 14 sbJson = sbJson.Remove(sbJson.Length - 1, 1); 15 } 16 sbJson.Append("]"); 17 return sbJson.ToString(); 18 }

本方法是构造tree实体,返回实体:

1/// <summary> 2 /// 绑定列表递归方法 3 /// </summary> 4 /// <param name="ddl">构造tree数据结构返回的实体</param> 5 /// <param name="menus">绑定的数据源</param> 6 /// <param name="categoryid">父级id值</param> 7 private void BindChannelType(List<ECategoryModel> ddl, List<ECategory> menus, Guid categoryid) 8 { 9 List<ECategory> filterMenu = menus.Where(w => w.ParentID == categoryid).ToList(); 10 11 foreach (var m in filterMenu) 12 { 13 var mextend = new ECategoryModel 14 { 15 ID = m.ID, 16 ParentID = m.ParentID, 17 CategoryName = m.CategoryName, 18 URL = m.URL, 19 Sort = m.Sort, 20 IsDelete = m.IsDelete 21 }; 22 ddl.Add(mextend); 23 BindChannelType(mextend.children, menus, m.ID); 24 } 25 }

构造树形数据(带空格和缩进):

1/// <summary> 2 /// 构造树形下拉框数据结构 3 /// </summary> 4 private void Generate(List<ECategoryModel> viewList, List<ECategory> categories, Guid categoryid, int i = 0) 5 { 6 i++; 7 var filterMenu = categories.Where(w => w.ParentID == categoryid).OrderBy(w => w.Sort).ToList(); 8 9 foreach (var m in filterMenu) 10 { 11 var str = ""; //父级菜单不缩进 for (var j = 1; j < i; j++) { str += HttpUtility.HtmlDecode("&nbsp;&nbsp;") + "├"; } var mextend = new ECategoryModel { ID = m.ID, ParentID = m.ParentID, CategoryName = $"{str}{m.CategoryName}", URL = m.URL, iconSkin = m.URL, Sort = m.Sort, IsDelete = m.IsDelete }; viewList.Add(mextend); Generate(viewList, categories, m.ID, i); } }

相关的实体类 ECategoryModel.cs

1using System; 2using System.Collections.Generic; 3 4namespace MSEduPlatform.Models 5{ 6 /// <summary> 7 /// ECategory表实体类 8 /// </summary> 9 public class ECategoryModel 10 { 11 /// <summary> 12 /// 菜单ID 13 /// </summary> 14 public Guid ID { get; set; } 15 16 /// <summary> 17 /// 父级菜单ID 18 /// </summary> 19 public Guid ParentID { get; set; } 20 21 /// <summary> 22 /// 菜单Code 23 /// </summary> 24 public string Code { get; set; } 25 26 /// <summary> 27 /// 菜单名称 28 /// </summary> 29 public string CategoryName { get; set; } 30 31 /// <summary> 32 /// 菜单地址 33 /// </summary> 34 public string URL { get; set; } 35 36 /// <summary> 37 /// 菜单排序 38 /// </summary> 39 public int Sort { get; set; } 40 41 /// <summary> 42 /// 显示状态 43 /// </summary> 44 public int States { get; set; } 45 46 /// <summary> 47 /// 栏目权限类别 48 /// </summary> 49 public string AuthorizationType { get; set; } 50 51 /// <summary> 52 /// 是否授权 53 /// </summary> 54 public bool IsAuthorization { get; set; } 55 56 /// <summary> 57 /// 创建人 58 /// </summary> 59 public Guid Creater { get; set; } 60 61 /// <summary> 62 /// 创建时间 63 /// </summary> 64 public DateTime CreateTime { get; set; } 65 66 /// <summary> 67 /// 修改人 68 /// </summary> 69 public Guid Modify { get; set; } 70 71 /// <summary> 72 /// 修改时间 73 /// </summary> 74 public DateTime ModifyTime { get; set; } 75 76 /// <summary> 77 /// 是否逻辑删除 78 /// </summary> 79 public int IsDelete { get; set; } 80 81 /// <summary> 82 /// 子数据列表 83 /// </summary> 84 public List<ECategoryModel> children = new List<ECategoryModel>(); 85 } 86}
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

java第二次作业

(一)学习总结1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?(1)在对面向对象程序中构造方法的主要作用是为类中的属性初始化。在构造方法中要注意以下几点①构造方法的名称必须与类名称一致②构造方法的声明处不能有任何返回值类型的说明③不能在构造方法中使用return返回一个值(2)构造方法的重载就

java中的构造方法,this、super的用法

1、构造方法定义:与类同名没有返回值的方法称为构造方法;publicclasstest1{privateStringname;privateintage;publictest1(){}}上面的test1()是默认构造方法,即使没有定义java虚拟机在运行的时候也会自动生成,当然如果定义了重载的构造方

Java高并发编程四

_做个笔记,java线程常用的方法,耐心看完._编号方法说明1publicvoidstart()使该线程开始执行;Java虚拟机调用该线程的run方法。2publicvoidrun()如果该线程是使用独立的Runnable运行对象构造的,则调用该Runnable对象的run方法;否则,该方

Java类和对象

一、类类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,而对象的方法以成员方法的形式存在。1\.类的构造方法构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,构造方法分为有参构造方法和无参构造方法,区别就在于有没有参数。说这么多概念是不是感觉有点麻木,直接看下面的例子吧。pub