C# ASP.NET递归循环生成嵌套json结构树
1. 建立用来保存树结构数据的目标对象
- public class TreeObject
- {
- public string name { get; set; }
- public string value { get; set; }
- public IList<TreeObject> children = new List<TreeObject>();
- public void Addchildren(TreeObject node)
- {
- this.children.Add(node);
- }
- }
2.查询表获得数据源
- /// <summary>
- ///数据库的连接字符串
- /// </summary>
- private static readonly string connstr = @"server=.;database=userInfo;uid=sa;pwd=123456";;
- public DataTable getTable(string cmdText)
- {
- using (SqlConnection cnn = new SqlConnection(connstr))
- {
- using (SqlCommand comm = new SqlCommand(cmdText, cnn))
- {
- comm.CommandType = CommandType.Text;
- SqlDataAdapter da = new SqlDataAdapter();
- da.SelectCommand = comm;
- DataTable mytable = new DataTable();
- da.Fill(mytable);
- return mytable;
- }
- }
- }
- public DataTable GetDataTable()
- {
- string sql = @"select ID,NAME_SHORT,BELONGTO_ID
- from UserInfo
- order by BELONGTO_ID";
- DataTable dt = getTable(sql);
- return dt;
- }
3.递归循环生成树
- //全局变量用于保存数据
- public List<TreeObject> treeNodes = new List<TreeObject>();
- //建立树的递归方法
- /// </summary>
- /// <param name="dtSource">数据源</param>
- /// <param name="parentNode">父节点</param>
- /// <param name="parentID">节点的归属ID</param>
- public void BindTree(DataTable dtSource, TreeObject parentNode, string parentID)
- {
- DataRow[] rows = dtSource.Select(string.Format("BELONGTO_ID={0}", parentID));
- foreach (DataRow row in rows)
- {
- TreeObject tree = new TreeObject();
- tree.name = row["NAME_SHORT"].ToString();
- tree.value = row["ID"].ToString();
- //递归性质,函数内调用自身函数
- BindTree(dtSource, tree, row["ID"].ToString());
- //递归结束的终点条件
- if (parentNode == null)
- {
- treeNodes.Add(tree);
- }
- else
- {
- parentNode.children.Add(tree);
- }
- }
- }
4.调用
- //调用SQL,获取数据源
- DataTable dt = GetDataTable();
- //调用递归函数,传入数据源,根节点
- BindTree(dt, null, "");
- //反序列化对象,生成json字符串
- string jsonData = JsonConvert.SerializeObject(treeNodes);
- return jsonData;
5.效果
- [{
- "name": 'A',
- "value": '',
- "children": [{
- "name": 'B1',
- "value": '',
- "children": [{
- "children": [],
- "name": 'C',
- "value": ''
- },
- {
- "children": [],
- "name": 'D',
- "value": ''
- },
- {
- "children": [],
- "name": 'E',
- "value": ''
- }
- ]
- },
- {
- "name": 'B2',
- "value": '',
- "children": [{
- "children": [],
- "name": 'F',
- "value": ''
- },
- {
- "children": [],
- "name": 'G',
- "value": ''
- }
- ]
- },
- {
- "name": 'B3',
- "value": '',
- "children": [{
- "children": [],
- "name": 'H',
- "value": ''
- },
- {
- "children": [],
- "name": 'I',
- "value": ''
- },
- {
- "children": [],
- "name": 'J',
- "value": ''
- }
- ]
- },
- {
- "name": 'B4',
- "value": '',
- "children": [{
- "children": [],
- "name": 'K',
- "value": ''
- },
- {
- "name": 'L',
- "value": '',
- "children": [{
- "children": [],
- "name": 'L1',
- "value": ''
- },
- {
- "children": [],
- "name": 'L2',
- "value": ''
- }
- ]
- }
- ]
- }
- ]
- }]
C# ASP.NET递归循环生成嵌套json结构树的更多相关文章
- ASP.NET提取多层嵌套json数据的方法
本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...
- 详解ASP.NET提取多层嵌套json数据的方法
本篇文章主要介绍了ASP.NET提取多层嵌套json数据的方法,利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,有兴趣的可以了解一下. 本文实例讲述了ASP.NET利用第三 ...
- 【json/regex】将嵌套对象生成的json文进行内部整形排序后再输出
下载地址:https://files.cnblogs.com/files/xiandedanteng/jsonformat20191126-2.zip 注意:本文仅为draft1版本,还有待完善. 先 ...
- ASP.NET Web API中的JSON和XML序列化
ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
- Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...
- Atitit.json xml 序列化循环引用解决方案json
Atitit.json xml 序列化循环引用解决方案json 1. 循环引用1 2. 序列化循环引用解决方法1 2.1. 自定义序列化器1 2.2. 排除策略1 2.3. 设置序列化层次,一般3级别 ...
- c# 使用递归 循环遍历导航树结构 并解析
1.数据书库结构 1 家用电器 0 一级菜单 2 手机.数码.京东通信 0 一级菜单 3 电脑.办公 0 一级菜单 4 家具.家居.厨房 0 一级菜单 5 男装.女装.童装.内衣 0 一级菜单 6 个 ...
随机推荐
- Java创建线程的方式
Java中线程的创建有四i种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 3.应用程序 ...
- 第一章 Python 基础
1. 为什么学习 Python? 答题路线:a.python的优点,b.python的应用领域广 具体: 优点 1.python语法非常优雅,简单易学 2.免费开源 3.跨平台,可以自由移植 4.可扩 ...
- CF894B Ralph And His Magic Field
题目链接:http://codeforces.com/contest/894/problem/B 题目大意: 往一个 \(n \times m\) 的网格中填数字 \((1 \le n,m \le 1 ...
- 杨辉三角(hdu2032)——有待完善
思考:杨辉三角形 #include<stdio.h> #include<cstring> int main() { int n; char d; ][] = {}; while ...
- #!/usr/bin/python
它是用来指定用什么解释器运行脚本以及解释器所在的位置. 参考链接:https://www.cnblogs.com/qmfsun/p/6291982.html
- Robot Framework(1)- 入门介绍
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html RF 的介绍 R ...
- 如何在Teamcenter中使用PMI?
1 .什么是PMI 在设计制造领域,PMI指的是产品制造信息(Productand Manufacturing Information),其目的在于在三维环境下,将制造信息从设计部门传递到制造部门.其 ...
- elementUI中el-input输入数字且保留指定小数位
<input type="text" placeholder="请输入保留一位小数的数字" class="user-input user-nam ...
- JVM调优总结(八)-反思
垃圾回收的悖论 所谓“成也萧何败萧何”.Java的垃圾回收确实带来了很多好处,为开发带来了便利.但是在一些高性能.高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈.目前JDK的垃圾回收算法,始终 ...
- [工具推荐]004.EXE签名工具SignTool使用教程
数字证书,真是个神奇的东西,可以保证软件不被修改,可以表明文件的发布日期,最重要的,可以很大程度的减少杀毒软件的误报,当然,这就要使用可信任的机构颁发的证书了. 现在要说的不是申请证书,而是如何制作自 ...