DataTable 递归生成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, "0");
//反序列化对象,生成json字符串
string jsonData = JsonConvert.SerializeObject(treeNodes);
return jsonData;
5.效果

[{
    "name": 'A',
    "value": '10000',
    "children": [{
            "name": 'B1',
            "value": '10002',
            "children": [{
                    "children": [],
                    "name": 'C',
                    "value": '10007'
                },
                {
                    "children": [],
                    "name": 'D',
                    "value": '10008'
                },
                {
                    "children": [],
                    "name": 'E',
                    "value": '10009'
                }

            ]
        },
        {
            "name": 'B2',
            "value": '10003',
            "children": [{
                    "children": [],
                    "name": 'F',
                    "value": '10010'
                },
                {
                    "children": [],
                    "name": 'G',
                    "value": '10011'
                }
            ]
        },
        {
            "name": 'B3',
            "value": '10004',
            "children": [{
                    "children": [],
                    "name": 'H',
                    "value": '10012'
                },
                {
                    "children": [],
                    "name": 'I',
                    "value": '10013'
                },
                {
                    "children": [],
                    "name": 'J',
                    "value": '10014'
                }
            ]
        },
        {
            "name": 'B4',
            "value": '10005',
            "children": [{
                    "children": [],
                    "name": 'K',
                    "value": '10015'
                },

                {
                    "name": 'L',
                    "value": '10016',
                    "children": [{
                            "children": [],
                            "name": 'L1',
                            "value": '10017'
                        },
                        {
                            "children": [],
                            "name": 'L2',
                            "value": '10018'
                        }
                    ]
                }
            ]
        }

    ]
}]

https://www.programminghunter.com/article/121228738/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.Net10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值