c# 使用递归 循环遍历导航树结构 并解析

1、数据书库结构

 

1家用电器0一级菜单
2手机、数码、京东通信0一级菜单
3电脑、办公0一级菜单
4家具、家居、厨房0一级菜单
5男装、女装、童装、内衣0一级菜单
6个人护装、清洁用品0一级菜单
7大家电1二级菜单
8厨卫大电1二级菜单
9厨卫小电1二级菜单
10生活用品1二级菜单
11平板电视7三级菜单
12家用空调7三级菜单
13油烟机8三级菜单
14燃气灶8三级菜单
16电饭煲9三级菜单
17微波炉9三级菜单
18手机通讯2二级菜单
19运营商2二级菜单
20京东通信2二级菜单
21手机18三级菜单
22对讲机18三级菜单
23手机维修18三级菜单
24选号中心20三级菜单
25自助服务20三级菜单
26电脑整机3二级菜单
27电脑配件3二级菜单
28外设产品3二级菜单
29笔记本26三级菜单
30游戏本26三级菜单
31平板电脑26三级菜单
32CPU27三级菜单
33主板27三级菜单
34显卡27三级菜单
36鼠标28三级菜单
37键盘28三级菜单

 

2、c#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using SanxingjinxiaocunDAL;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

namespace Sanxingjinxiaocun.qinghua
{
/// <summary>
/// Method 的摘要说明
/// </summary>
public class Method : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
#region 调用写好的类,序列化成JSON格式
Cliet clite = new Cliet();
JieDian root = new JieDian();
root.Name = "根节点";
root.Id = 0;
clite.creatTheTree("0", root); //根节点的parentBh值为"0"

//对root对象进行序列化
DataContractJsonSerializer dc = new DataContractJsonSerializer(root.GetType());
MemoryStream ms = new MemoryStream();
dc.WriteObject(ms, root);
byte[] aryByte = ms.ToArray();
string json = Encoding.UTF8.GetString(aryByte, 0, aryByte.Length);
ms.Close();
context.Response.Write(json.ToString());
#endregion
}

public bool IsReusable
{
get
{
return false;
}
}
}


#region 根所JSON格式,先写相应的实体类,为读取数据后封装提供支持。
///<summary> 
///节点的实体类,记录了数据库中的3个字段 
///为的是方便操作
/// </summary>
[Serializable]
public class Item
{
public int Id;
public string Name;
public int ParentId;
public string ContentText;
}
/// <summary>
/// 节点类,基础类
/// </summary>
[Serializable]
public class JieDian
{
public string Name = "";
public int Id = 0;
public int ParentId = 0;
public string ContentText = "";
public JieDian[] children = null;
}
/// <summary>
/// ss
/// </summary>
[Serializable]
public class Cliet
{
//根据parentBh获取相应的子目录集合
public Item[] GetTheItems(string parentId)
{
//根据父节点获取选项集合
string sql = "select * from t_Menu where parentId=" + parentId;
//这里改成你的数据库表
SqlDataReader dr = DbHelperSQL.ExecuteReader(sql); //这里我直接调用了我库中的类
List<Item> items = new System.Collections.Generic.List<Item>();
while (dr.Read())
{
Item i = new Item();
i.Id = dr.GetInt32(0);
i.Name = dr.GetString(1);
i.ParentId = dr.GetInt32(2);
i.ContentText = dr.GetString(3);
items.Add(i);
}
dr.Close();
//一定要对这进行关闭
return items.ToArray();
//返回 
}

//生成树的方法
public void creatTheTree(string parentId, JieDian jd)
{
//获取
Item[] items = GetTheItems(parentId);
//如果没有字节点了,那就返回空
if (items.Length == 0)
return;
List<JieDian> jdList = new List<JieDian>();
for (int i = 0; i < items.Length; i++)
{
JieDian jiedian = new JieDian();
jiedian.Id = items[i].Id;
jiedian.Name = items[i].Name;
jiedian.ParentId = items[i].ParentId;
jiedian.ContentText = items[i].ContentText;
//递归循环
creatTheTree(items[i].Id.ToString(), jiedian);
jdList.Add(jiedian);
}
jd.children = jdList.ToArray(); //由于对象是引用类型,因为可以改变参数的值
}
}
#endregion
}
View Code

 

3、返回Json:   

var data ={
    "ContentText": "",
    "Id": 0,
    "Name": "根节点",
    "ParentId": 0,
    "children": [
        {
            "ContentText": "一级",
            "Id": 1,
            "Name": "家电电器",
            "ParentId": 0,
            "children": [
                {
                    "ContentText": "二级",
                    "Id": 4,
                    "Name": "小米电视",
                    "ParentId": 1,
                    "children": [
                        {
                            "ContentText": "三级",
                            "Id": 7,
                            "Name": "小米1S",
                            "ParentId": 4,
                            "children": null
                        },
                        {
                            "ContentText": "三级",
                            "Id": 8,
                            "Name": "小米2S",
                            "ParentId": 4,
                            "children": null
                        },
                        {
                            "ContentText": "三级",
                            "Id": 9,
                            "Name": "小米3S",
                            "ParentId": 4,
                            "children": null
                        }
                    ]
                },
                {
                    "ContentText": "二级",
                    "Id": 6,
                    "Name": "乐视电视",
                    "ParentId": 1,
                    "children": [
                        {
                            "ContentText": "三级",
                            "Id": 10,
                            "Name": "超级电视1",
                            "ParentId": 6,
                            "children": null
                        },
                        {
                            "ContentText": "三级",
                            "Id": 11,
                            "Name": "超级电视2",
                            "ParentId": 6,
                            "children": null
                        }
                    ]
                }
            ]
        },
        {
            "ContentText": "一级",
            "Id": 3,
            "Name": "孕妇婴儿",
            "ParentId": 0,
            "children": [
                {
                    "ContentText": "二级",
                    "Id": 13,
                    "Name": "孕妇装",
                    "ParentId": 3,
                    "children": null
                },
                {
                    "ContentText": "二级",
                    "Id": 14,
                    "Name": "孕妇枕",
                    "ParentId": 3,
                    "children": null
                },
                {
                    "ContentText": "二级",
                    "Id": 15,
                    "Name": "孕妇钙片",
                    "ParentId": 3,
                    "children": null
                },
                {
                    "ContentText": "二级",
                    "Id": 16,
                    "Name": "婴儿车",
                    "ParentId": 3,
                    "children": [
                        {
                            "ContentText": "三级",
                            "Id": 19,
                            "Name": "摇摇车",
                            "ParentId": 16,
                            "children": null
                        },
                        {
                            "ContentText": "三级",
                            "Id": 20,
                            "Name": "木马车",
                            "ParentId": 16,
                            "children": null
                        }
                    ]
                },
                {
                    "ContentText": "二级",
                    "Id": 18,
                    "Name": "婴儿奶粉",
                    "ParentId": 3,
                    "children": null
                }
            ]
        }
    ]
}


递归循环解析:
$.each(data.children,function(index,item1){
  console.log(item1)
  if(item1.children){
    $.each(item1.children,function(index,item2){
      console.log(item2)
      if(item2.children){
        $.each(item2.children,function(index,item3){
         console.log(item3)
        })
      }
    })
  }
 
  

  

 

 

转载于:https://www.cnblogs.com/wwy224y/p/5497392.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值