You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LINQ重排JSON对象中父元素下的子元素

使用LINQ将扁平的groupFields数组转换为层级结构

嘿,我来帮你搞定这个用LINQ重排JSON数组结构的问题!咱们的目标是把扁平的groupFields数组,把子元素都归到对应的父元素下面,形成树形层级结构。下面分步骤给你讲解实现方法:

第一步:定义对应的实体类

首先得把JSON里的结构映射成C#实体,而且要加上子元素的集合属性,用来存放子节点:

public class GroupField
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    public string ParentName { get; set; }
    // 新增子节点集合,用来存放子元素
    public List<GroupField> Children { get; set; } = new List<GroupField>();
}

第二步:用LINQ+字典实现高效转换

这种方法效率很高,因为用字典做O(1)的父元素查找,避免多次遍历数组:

// 先把你的JSON反序列化成扁平的GroupField列表
var flatGroupFields = JsonConvert.DeserializeObject<List<GroupField>>(yourJsonString);

// 创建ID到GroupField的字典,方便快速定位父元素
var groupDict = flatGroupFields.ToDictionary(g => g.Id);

// 遍历每个元素,将其添加到对应父元素的子集合中
foreach (var group in flatGroupFields)
{
    if (group.ParentId.HasValue && groupDict.ContainsKey(group.ParentId.Value))
    {
        groupDict[group.ParentId.Value].Children.Add(group);
    }
}

// 最后筛选出所有根节点(ParentId为null的元素),就是我们要的层级结构
var hierarchicalGroups = flatGroupFields.Where(g => !g.ParentId.HasValue).ToList();

可选:纯LINQ递归实现(不修改原始数据)

如果你不想修改原始的扁平数据,想要创建新的层级对象,可以用递归的LINQ查询:

// 先反序列化得到扁平列表
var flatGroupFields = JsonConvert.DeserializeObject<List<GroupField>>(yourJsonString);

// 定义递归委托来构建层级
Func<int?, List<GroupField>> buildHierarchy = null;
buildHierarchy = parentId => 
    flatGroupFields
        .Where(g => g.ParentId == parentId)
        .Select(g => new GroupField
        {
            Id = g.Id,
            Name = g.Name,
            ParentId = g.ParentId,
            ParentName = g.ParentName,
            Children = buildHierarchy(g.Id) // 递归构建子节点
        })
        .ToList();

// 传入null获取所有根节点
var hierarchicalGroups = buildHierarchy(null);

两种方式各有优势:第一种方式直接修改原始对象的子集合,性能更好;第二种方式生成新的对象,不会影响原始数据,适合需要保留原始扁平结构的场景。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:00:48