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

ASP.NET WebService中C#如何在InvoiceRoot内构建ItemDetails列表

在InvoiceRoot对象初始化时构建ItemDetails列表的解决方案

你尝试在对象初始化器的集合初始化块里直接写for循环是语法错误——C#的集合初始化器仅支持元素初始化表达式,不能直接嵌入循环语句。以下是两种可行的解决方式:

方式一:先构建列表再赋值

这是你已经验证有效的方式,直接将预构建好的列表赋值给InvoiceRoot的ItemList成员:

// 提前构建ItemDetails列表
List<ItemDetails> ItemLists = new List<ItemDetails>();
for (int i = 0; i < serial_no; i++)
{
    ItemLists.Add(new ItemDetails
    {
        SlNo = (string)All_SerialNo[i],
        PrdDesc = null,
        IsServc = item_isservice,
        HsnCd = item_hsncode[i].ToString(),
        Barcde = null,
        Qty = Convert.ToDecimal(item_quantity[i].ToString()),
        FreeQty = Convert.ToDecimal(item_freeqty[i].ToString()),
        Unit = null,
        UnitPrice = Convert.ToDecimal(item_rate[i].ToString()),
        TotAmt = Convert.ToDecimal(item_total_price[i].ToString()),
        Discount = Convert.ToDecimal(item_discount[i].ToString()),
        PreTaxVal = Convert.ToDecimal(item_taxable_amount[i].ToString()),
        AssAmt = Convert.ToDecimal(item_taxable_amount[i].ToString()) - Convert.ToDecimal(item_discount[i].ToString()),
        GstRt = 9,
        IgstAmt = Convert.ToDecimal(item_IGST_Amt[i].ToString()),
        CgstAmt = Convert.ToDecimal(item_CGST_Amt[i].ToString()),
        SgstAmt = Convert.ToDecimal(item_SGST_Amt[i].ToString()),
        CesRt = 0,
        CesAmt = 0,
        OthChrg = 0,
        StateCesRt = 0,
        StateCesAmt = 0,
        StateCesNonAdvlAmt = 0,
        TotItemVal = item_totalvalue[i].ToString(),
        OrdLineRef = null,
        OrgCntry = null,
        PrdSlNo = null,
        BchDtls = null,
    });
}

// 初始化InvoiceRoot并赋值列表
InvoiceRoot invoice = new InvoiceRoot
{
    Version = "1.1",
    DocDtls = new DocumentDetails
    {
        Typ = "Invoice",
        No = invoice_no.ToString(),
        Dt = invoice_date
    },
    ItemList = ItemLists
};

方式二:用LINQ直接在初始化器中生成列表

借助LINQ的Enumerable.Range和Select,可以直接在InvoiceRoot初始化时生成列表,无需单独写循环:

InvoiceRoot invoice = new InvoiceRoot
{
    Version = "1.1",
    DocDtls = new DocumentDetails
    {
        Typ = "Invoice",
        No = invoice_no.ToString(),
        Dt = invoice_date
    },
    ItemList = Enumerable.Range(0, serial_no)
                          .Select(i => new ItemDetails
                          {
                              SlNo = (string)All_SerialNo[i],
                              PrdDesc = null,
                              IsServc = item_isservice,
                              HsnCd = item_hsncode[i].ToString(),
                              Barcde = null,
                              Qty = Convert.ToDecimal(item_quantity[i].ToString()),
                              FreeQty = Convert.ToDecimal(item_freeqty[i].ToString()),
                              Unit = null,
                              UnitPrice = Convert.ToDecimal(item_rate[i].ToString()),
                              TotAmt = Convert.ToDecimal(item_total_price[i].ToString()),
                              Discount = Convert.ToDecimal(item_discount[i].ToString()),
                              PreTaxVal = Convert.ToDecimal(item_taxable_amount[i].ToString()),
                              AssAmt = Convert.ToDecimal(item_taxable_amount[i].ToString()) - Convert.ToDecimal(item_discount[i].ToString()),
                              GstRt = 9,
                              IgstAmt = Convert.ToDecimal(item_IGST_Amt[i].ToString()),
                              CgstAmt = Convert.ToDecimal(item_CGST_Amt[i].ToString()),
                              SgstAmt = Convert.ToDecimal(item_SGST_Amt[i].ToString()),
                              CesRt = 0,
                              CesAmt = 0,
                              OthChrg = 0,
                              StateCesRt = 0,
                              StateCesAmt = 0,
                              StateCesNonAdvlAmt = 0,
                              TotItemVal = item_totalvalue[i].ToString(),
                              OrdLineRef = null,
                              OrgCntry = null,
                              PrdSlNo = null,
                              BchDtls = null,
                          })
                          .ToList()
};

两种方式都能生成你预期的JSON结构,包含多个ItemDetails对象的ItemList数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:25:24