asp.net core 生成json树(jsonTree)
方式一 :
一. nuget 添加 microsoft.aspnetcore.mvc.newtonsoftjson 引用,一定要添加这个,不是newtonsoft.Json。 否则职能输出一个根节点 。
二、 在 start.cs public void ConfigureServices(IServiceCollection services) 方法中 添加以下代码。配置JSON输出项
services.AddControllers().AddNewtonsoftJson(options => { //设置时间格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //忽略循环引用 options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //数据格式首字母小写 //options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //数据格式按原样输出 options.SerializerSettings.ContractResolver = new DefaultContractResolver(); //忽略空值 options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; });
三、定义 TreeObject类 TreeObject.cs
public class TreeObject { public int Id { get; set; } public string Name { get; set; } public int ParentId { get; set; } public List<TreeObject> nodes = new List<TreeObject>(); public void Addchildren(TreeObject node) { this.nodes.Add(node); } }
四、定义递归方法 将列表的中节点 以树形存储数据结构
TreeJsonExtension.cs
public static class TreeJsonExtension
{ /// <summary> /// 递归生成json树 /// </summary> /// <param name="menuEntities"> 列表数据 </param> /// <param name="id"> 树根编号 </param> /// <returns> 递归后的Node </returns> public static TreeObject BindTree(List<TreeObject> List, int id) { TreeObject node = List.Where(t => t.Id == id).First(); List<TreeObject> childTreeNodes = List.Where(t => t.ParentId == id).ToList(); foreach (var child in childTreeNodes) { TreeObject n = BindTree(List, child.Id); node.nodes.Add(n); } return node; } }
五、新建controller测试
public class HomeCotroller:Controller { List<TreeObject> Trees = new List<TreeObject> { new TreeObject { Id=0, Name="各单位", ParentId=-1, }, new TreeObject { Id=1, Name="县委部门", ParentId=0, }, new TreeObject { Id=2, Name="政府部门", ParentId=0, }, new TreeObject { Id=3, Name="县委办", ParentId=1, }, new TreeObject { Id=4, Name="政府办", ParentId=2, } }; public IActionResult getTree() { var tree=TreeJsonExtension.BindTree( Trees,0 ) return Json( tree ); } }
结果如下图:

方式二:
如果在 向浏览器输出结果前要对json先做处理。
首先 引入 using Newtonsoft.Json;
然后调用 JsonConvert.SerializeObject(tree, Formatting.Indented);
public IActionResult getItemTree() { var tree = TreeJsonExtension.BindTree(convertTree(), 1); // Console.WriteLine(tree.ToString()); string s=JsonConvert.SerializeObject(tree, Formatting.Indented); return Content("["+s+"]"); }
最后,调用 return Content("["+s+"]"); 即可将生成树状 json 最外层 加上 “[ ]”
浙公网安备 33010602011771号