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 最外层 加上 “[ ]”

 

posted on 2022-07-18 11:37  码农at突泉  阅读(669)  评论(0)    收藏  举报