如何在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
相关产品推荐
相关产品推荐

