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

如何在C#中按订单分组多行数据并生成指定JSON格式

C#实现按订单分组并生成指定JSON结构

核心实现思路

利用LINQ的GroupBy方法按order_number分组,将每组的订单级字段提取到Order对象,同时把组内的商品明细转换为Lines子列表,最后序列化生成JSON。

模型类参考(假设你已定义,若有差异可调整)

public class FullRow
{
    public string OrderNumber { get; set; }
    public string CustomerName { get; set; }
    public decimal TotalAmount { get; set; }
    public string ProductId { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
}

public class Order
{
    public string OrderNumber { get; set; }
    public string CustomerName { get; set; }
    public decimal TotalAmount { get; set; }
    public List<OrderItems> Lines { get; set; } = new List<OrderItems>();
}

public class OrderItems
{
    public string ProductId { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
}

分组转换代码

// 假设你已构造好测试数据List<FullRow> fullRows
var orders = fullRows
    .GroupBy(row => row.OrderNumber)
    .Select(group => new Order
    {
        OrderNumber = group.Key,
        // 同一订单的订单级字段需确保一致,这里取组内第一行的值
        CustomerName = group.First().CustomerName,
        // 如果TotalAmount是行级金额,需改为Sum求和:group.Sum(row => row.TotalAmount)
        TotalAmount = group.First().TotalAmount,
        Lines = group.Select(item => new OrderItems
        {
            ProductId = item.ProductId,
            ProductName = item.ProductName,
            Quantity = item.Quantity,
            UnitPrice = item.UnitPrice
        }).ToList()
    })
    .ToList();

生成JSON

方式1:使用.NET内置System.Text.Json

using System.Text.Json;

var json = JsonSerializer.Serialize(orders, new JsonSerializerOptions
{
    WriteIndented = true // 生成格式化的JSON,可选
});

方式2:使用Newtonsoft.Json(需先安装NuGet包)

using Newtonsoft.Json;

var json = JsonConvert.SerializeObject(orders, Formatting.Indented);

注意事项

  • 确保同一OrderNumber下的订单级字段(如CustomerName)值一致,若存在不一致的情况,需根据业务逻辑调整(比如取第一个、取唯一值或报错)。
  • 如果TotalAmount是商品行的金额总和,需将group.First().TotalAmount替换为group.Sum(row => row.TotalAmount)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:23:17