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

