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

C#中如何循环生成PayParam的LineItems数组以构造JSON?

如何在C#中批量生成LineItemParam数组以初始化PayParam

我需要向供应商传递JSON文件,供应商接收后返回令牌,为此定义了以下C#类:

public class PayParam
{
    public LineItemParam[] LineItems { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public string CustomerId { get; set; }
    public string CompanyName { get; set; }
}

public class LineItemParam
{
    public string Sku { get; set; }
    public string Description { get; set; }
    public decimal UnitPrice { get; set; }
    public int Quantity { get; set; }
}

目前我通过手动赋值构造JSON,但需要为desc数组中的每个描述生成对应的LineItemParam,尝试在对象初始化器中使用foreach循环时出现语法错误,只能手动逐个添加LineItemParam。当前代码如下(存在语法错误):

var parameters = new PayParam();
MailingInfo IdData = scData.FindData();

string[] desc = {"Test1", "Test2", "Test3"}; // 修正原代码缺失的闭合引号
parameters = new PayParam
{
    Phone = IdData.PhoneNumber,
    Email = IdData.Email.ToUpper(),
    CustomerId = "1234",
    CompanyName = "TEST NAME",
    // 原代码错误地将LineItems写在了初始化器大括号外
    LineItems = new LineItemParam[]
    {
        new LineItemParam
        {
            Sku = GetSKU(),
            Description = "Test Desc",
            UnitPrice = 12.00,
            Quantity = 1
        }
    }
};

解决方案

方法1:使用LINQ批量生成数组

直接在对象初始化器中通过LINQ的Select方法遍历desc数组,生成对应的LineItemParam集合,最后转换为数组:

var parameters = new PayParam
{
    Phone = IdData.PhoneNumber,
    Email = IdData.Email.ToUpper(),
    CustomerId = "1234",
    CompanyName = "TEST NAME",
    LineItems = desc.Select(description => new LineItemParam
    {
        Sku = GetSKU(), // 若每个Sku需与描述对应,可调整参数如GetSKU(description)
        Description = description,
        UnitPrice = 12.00m, // decimal类型建议加m后缀明确类型
        Quantity = 1
    }).ToArray()
};

方法2:通过List循环添加后转数组

如果不习惯LINQ,可以先创建List<LineItemParam>,循环添加元素后再转换为数组:

var lineItems = new List<LineItemParam>();
foreach (var description in desc)
{
    lineItems.Add(new LineItemParam
    {
        Sku = GetSKU(),
        Description = description,
        UnitPrice = 12.00m,
        Quantity = 1
    });
}

var parameters = new PayParam
{
    Phone = IdData.PhoneNumber,
    Email = IdData.Email.ToUpper(),
    CustomerId = "1234",
    CompanyName = "TEST NAME",
    LineItems = lineItems.ToArray()
};

补充说明

  1. 原代码中string[] desc = {"Test1", "Test2", "Test3};缺失了最后一个引号,需修正为"Test3"。
  2. 对象初始化器中LineItems必须包含在PayParam的初始化大括号内,原代码的位置错误会导致语法问题。
  3. 赋值decimal类型时,建议添加m后缀(如12.00m),避免编译时将浮点数隐式转换为decimal带来的精度问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:10:14