遍历List 按照JSON格式拼接字符串
手机不能发评论 谢啦 采纳我就有c币
如果不考虑性能 还有有一些简单实现 只拿顶级菜单 展开时再获取下一级菜单
或者一次从数据库查询一级菜单 递归查询就拿到所有级别的菜单了
在后台处理成多层json对象再传回前台,个人觉得后台处理数据还简单点
补充:c#代码,只是大概思路,没测试
public list getList(objectList)
{
list newList;
foreach (var item in objectList)
{
list childList = result.Where(x => x.pid == item.id.ToString()).ToList();
if (ChildList.Count > 0)
{
item.ChildList=getList(item.childList)
}
newList.add(item);
}
return newList;
}
public main()
{
var resultList;
var rootList=objectList.Where(x => x.pid == null).ToList();
resultList=getList(rootList)
}
补充测试结果及修改代码
我用的是mvc+ef+mysql
数据库数据
c#代码:
public ActionResult Index()
{
test1Entities test = new test1Entities();
List resultList=test.ces.ToList();
var rootList = resultList.Where(x => x.pid == null).ToList();
resultList = getList(rootList, resultList);
ViewBag.jsonStr = JsonConvert.SerializeObject(resultList);
return View();
}
public List getList(List objectList, List originList)
{
List newList=new List ();
foreach (var item in objectList)
{
List childList = originList.Where(x => x.pid == item.id).ToList();
if (childList.Count > 0)
{
item.childList = getList(childList, originList);
}
newList.Add(item);
}
return newList;
}
前台输出结果:
[{"childList":[{"childList":[{"childList":null,"id":4,"pid":2,"name":"ces4"}],"id":2,"pid":1,"name":"ces2"},{"childList":[{"childList":null,"id":5,"pid":3,"name":"ces5"}],"id":3,"pid":1,"name":"ces3"}],"id":1,"pid":null,"name":"ces"}]
写个父类获取子类的递归方法即可
public Result selectMarketingLbl() {
Result result = new Result();
List> list = DAO.selectByBaseId(937);// 查询子类sql
list = getDate(list);
result.setBeans(list);
return result;
}
private List> getDate( List> list){
for (Map map: list){
List> childList =
DAO.selectByBaseId((String)map.get("Id"));// 查询子类sql
if (childList != null && !childList.isEmpty()){
getDate(childList);
}
map.put("children", childList);
}
return list;
}
把object 换成对应的实体类