最近做个小项目里面的涉及到权限的菜单 根据用户权限 读取相应的菜单树-----------数据库结构------------------
ID   ParentID   Name
 1       0      顶级1
 2       0      顶级2
 3       0      顶级3
 4       1      二级1
 5       2      二级2
 6       4      三级1
 7       4      三级2
 8       5      三级3
 9       6      四级1如果是子节点 就输出 "leaf":true 否则就继续输出个节点children:[] 继续递归下去----------------生成的JSON大致效果---------------------------------
{"id":"1","text":"顶级1",children:[
      {"id":"4","text":"二级1", children:[
             {"id":"6","text":"三级1",children:[
                    {"id":"9","text":"四级1", "leaf":true}
                                                ]},
             {"id":"7","text":"三级2", "leaf":true}
                                          ]}
                                   ] },
{"id":"2","text":"顶级2",children:[
     {"id":"5","text":"二级2", children:[
          {"id":"7","text":"三级3", "leaf":true}
                                         ]}
                                  ]},
{"id":"3","text":"顶级3","leaf":true}
                                      
------------------------------------------------- 在网上搜了这样的代码 代码有误 不管有没有子节点都会输出children:[] ---
请大家帮忙看看http://blog.csdn.net/shaily/article/details/4205135
       public static string GetTasks(int TaskId)
        { 
            using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
            {
                conn.Open();
                OleDbCommand comm = new OleDbCommand("select * from [Tasks]", conn);
                OleDbDataAdapter ada = new OleDbDataAdapter();
                DataTable table = new DataTable();
                ada.Fill(table);
            }
            return "["+GetTasksString(TaskId,table)+"]";
        }        private static string GetTasksString(int TaskId,DataTable table)
        {
                DataRow[] rows = table.Select("ParentID="+TaskId.ToString());                if (rows.Length == 0) return string.Empty; ;
                StringBuilder str = new StringBuilder();
                
                foreach(DataRow row in rows)
                {
                    str.Append("{");
                    for (int i = 0; i < row.Table.Columns.Count; i++)
                    {
                        if(i!=0)str.Append(",");
                        str.Append(row.Table.Columns[i].ColumnName);
                        str.Append(":'");
                        str.Append(row[i].ToString());
                        str.Append("'"); 
                    }
                    str.Append(",children:[");
                    str.Append(GetTasksString((int)row["TaskID"],table));
                    str.Append("]},");
                }
                return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();