ASP.NET Core如何将父子级数据合并为单个JSON数组?
解决ASP.NET Core中父级-子级JSON结构合并的问题
看起来你现在拿到的是扁平的父-子对列表,想要把相同父级的子项合并到一个数组里对吧?我来给你一步步说怎么实现:
第一步:定义对应的模型类
首先你需要两个模型,分别用来表示子项和包含子项列表的父级:
// 子项模型 public class CategoryChild { public string Child { get; set; } public string ChildID { get; set; } } // 父级模型,包含子项集合 public class CategoryParent { public string Parent { get; set; } public string ParentID { get; set; } public List<CategoryChild> Children { get; set; } = new List<CategoryChild>(); }
另外,如果你现在从数据库查询出来的是扁平结构(就是每个父-子对一条记录),可以先定义一个临时的扁平模型来接收:
// 临时扁平模型,对应你当前查询的结果结构 public class FlatCategory { public string Parent { get; set; } public string ParentID { get; set; } public string Child { get; set; } public string ChildID { get; set; } }
第二步:分组转换数据
在你的控制器方法里,先获取到扁平的数据,然后用LINQ的GroupBy来把相同父级的子项归到一起,再转换成我们需要的结构:
[HttpGet] public IActionResult GetGroupedCategories() { // 替换成你实际的数据库查询逻辑,获取扁平的父-子对列表 var flatData = _yourDbContext.Categories .Select(c => new FlatCategory { Parent = c.ParentName, ParentID = c.ParentId, Child = c.ChildName, ChildID = c.ChildId }) .ToList(); // 分组并构建目标结构 var groupedResult = flatData // 按父级ID和名称分组(用ID确保唯一,避免同名不同ID的父级被错误合并) .GroupBy(item => new { item.ParentID, item.Parent }) .Select(group => new CategoryParent { ParentID = group.Key.ParentID, Parent = group.Key.Parent, // 把分组里的子项转换成CategoryChild列表 Children = group.Select(childItem => new CategoryChild { ChildID = childItem.ChildID, Child = childItem.Child }).ToList() }) .ToList(); return Ok(groupedResult); }
第三步:验证返回结果
这样处理后,返回的JSON就会是你想要的结构:
[ { "parent": "Kitchen & Dining", "parentID": "QojQhZoUTkG1VhOMJVOBmw==", "children": [ { "child": "Bakeware", "childID": "BamlddxbUk2lx3uhaT4Hbg==" }, // 该父级下的其他子项 ] }, { "parent": "Hobbies", "parentID": "yTCm3n8OCUSDQBzDt1f9Hw==", "children": [ { "child": "Travel", "childID": "CAqwuhPIL02T2ufP/Tl0CA==" } ] } ]
需要注意的点:
- 分组的时候一定要用
ParentID作为分组依据之一,避免出现父级名称相同但ID不同的情况被错误合并。 - 如果你的数据库查询已经有分组逻辑,也可以直接在查询层面做分组,这样性能会更好,尤其是数据量比较大的时候。
内容的提问来源于stack exchange,提问作者Hasan Rasheed
相关产品推荐
相关产品推荐

