递归拼凑json字符串

本文介绍了如何通过递归方式将列表数据转换成JSON格式字符串,以满足在创建树形菜单时的数据需求。示例中涉及到对Model类的处理和递归函数的应用。

             最近因为要用树形菜单,需要ajax传一个如下结构的json字符串,于是写了以下函数,通过递归将LIST<Model>装换成json.

 Model类是这样的:

  public class Model
    {
        public string ID { get; set; }
        public string Name { get; set; }
        public string pID { get; set; }
    }


主程序:

 class Program
    {
        static void Main(string[] args)
        {
            List<Model> model = Init();
            string json= GetList(model, "000");
            Console.Write(json);
            Console.Read();
        }
        //递归将LIST<Model>装换成json.
        static public string GetList(List<Model> source,string PID)
        {
            StringBuilder json = new StringBuilder();
            json.Append("[");
            var query = from Model m in source
                        where m.pID == PID
                        select m;
            List<Model> parentList = query.ToList<Model>();
            foreach (Model node in parentList)
            {
                json.Append("{\"ID\":\"" + node.ID + "\",\"Name\":\"" + node.Name + "\",\"pID\":\"" + node.pID + "\",\"List\":" + GetList(source, node.ID) + "},");
            }
            if (parentList.Count > 0)
                json.Remove(json.Length - 1, 1);
            json.Append("]");
            return json.ToString();
        }<span style="font-family: Arial, Helvetica, sans-serif;">    </span>
        //给List<Model>赋值。       
        static public List<Model> Init()
        {
            List<Model> models = new List<Model>();
            Model m1 = new Model { ID = "001", Name = "p1", pID = "000" };
            Model m2 = new Model { ID = "002", Name = "p2", pID = "000" };
            Model m3 = new Model { ID = "003", Name = "p3", pID = "000" };
            Model m4 = new Model { ID = "004", Name = "z11", pID = "001" };
            Model m5 = new Model { ID = "005", Name = "z12", pID = "001" };
            Model m6 = new Model { ID = "006", Name = "z13", pID = "001" };
            Model m7 = new Model { ID = "007", Name = "z111", pID = "004" };
            Model m8 = new Model { ID = "008", Name = "z112", pID = "004" };
            Model m9 = new Model { ID = "009", Name = "z121", pID = "005" };
            Model m10 = new Model { ID = "0010", Name = "z131", pID = "006" };
            Model m11 = new Model { ID = "0011", Name = "z21", pID = "002" };
            Model m12 = new Model { ID = "0012", Name = "z211", pID = "0011" };
            Model m13 = new Model { ID = "0013", Name = "z212", pID = "0011" };
            Model m14 = new Model { ID = "0014", Name = "z1111", pID = "007" };
            Model m15 = new Model { ID = "0015", Name = "z1112", pID = "007" };
            Model m16 = new Model { ID = "0016", Name = "z1113", pID = "007" };
            models.Add(m1); models.Add(m9);
            models.Add(m2); models.Add(m10);
            models.Add(m3); models.Add(m11);
            models.Add(m4); models.Add(m12);
            models.Add(m5); models.Add(m13);
            models.Add(m6); models.Add(m14);
            models.Add(m7); models.Add(m15);
            models.Add(m8); models.Add(m16);
            return models;
        }
    }


结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值