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

使用LINQ分组扁平数据构建层级树以生成符合要求的JSON结构

解决方案

核心问题

你原有的LINQ查询生成了嵌套数组结构,且没有按期望的层级包装属性,导致站点重复、结构不符合要求。

修改方法

替换原inventorycontent相关的查询和序列化逻辑即可,调整后的查询会严格按你需要的层级分组包装对象:

void Main()
{
    var contents = new List<DatabaseRecord>()
    {
        new DatabaseRecord{Product="Autoblaster", Inventory="Hull 5", Site="Death star", Units=20,Weight=500},
        new DatabaseRecord{Product="E11 Blaster Rifle", Inventory="Hull 5", Site="Death star", Units=512,Weight=4096},
        new DatabaseRecord{Product="SWE/2 Sonic Rifle", Inventory="Hull 1", Site="Death star", Units=20,Weight=500},
        new DatabaseRecord{Product="Relby v10 Micro Grenade Launcher", Inventory="Hull 5", Site="Death star", Units=20,Weight=500},
        new DatabaseRecord{Product="T-8 Disruptor", Inventory="Hull 1", Site="Death star", Units=20,Weight=500},
        new DatabaseRecord{Product="E11 Blaster Rifle", Inventory="Hull 2", Site="Death star", Units=50,Weight=1200}
    };
    
    // 修改后的层级查询
    var resultRoot = new 
    {
        sites = contents
            .GroupBy(row => row.Site)
            .OrderBy(siteGroup => siteGroup.Key)
            .Select(siteGroup => new 
            {
                site = siteGroup.Key,
                inventories = siteGroup
                    .GroupBy(invRow => invRow.Inventory)
                    .OrderBy(invGroup => invGroup.Key)
                    .Select(invGroup => new 
                    {
                        name = invGroup.Key,
                        lines = invGroup.Select(p => new { p.Product, p.Weight, p.Units }).ToList()
                    }).ToList()
            }).ToList()
    };

    contents.Dump();
    resultRoot.Dump();
    
    JsonConvert.SerializeObject(resultRoot, Newtonsoft.Json.Formatting.Indented).Dump();
}

// 其他方法和类定义
class DatabaseRecord
{
    public string Product { get; set; }
    public string Inventory { get; set; }
    public string Site { get; set; }
    public int Units { get; set; }
    public double Weight { get; set; }
    
}

修改说明

  1. 新增最外层匿名对象包含sites属性,匹配你需要的根结构
  2. 站点分组后直接包装为带site和inventories属性的对象,站点名仅在这一层出现,自动去重
  3. 每个站点下的库存分组包装为带name和lines属性的对象,和期望的字段命名完全对齐

调整后序列化输出的JSON会完全符合你给出的预期格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:06:05