gpt4 book ai didi

c# - 从SQL Server中提取XML数据解析成C#中的JSON格式化问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:33 26 4
gpt4 key购买 nike

我在 C# 中使用 SQLCommand 针对将输出 XML 的本地计算机运行 SQL。 SQL 代码如下所示:

"SELECT 
' ' AS 'ItemsCount',
' ' AS 'Shipping',
' ' AS 'Fee',
' ' AS 'ShippingPrc',
' ' AS 'FeeType',
' ' AS 'FeeTaxPrc',
//many lines of SQL omitted
FROM im_item
JOIN ps_doc_lin
ON im_item.item_no = ps_doc_lin.item_no
JOIN ps_doc_hdr
ON ps_doc_hdr.doc_id = ps_doc_lin.doc_id
JOIN ar_cust
ON ar_cust.cust_no = ps_doc_hdr.cust_no
WHERE ps_doc_hdr.tkt_dt = (SELECT Max(tkt_dt) //I select Max(tkt_dt) here because this program will run right after a customer has completed checkout. I want to get the most recent ticket (i.e. the ticket just rang up)
FROM ps_doc_hdr)
FOR xml path ('Receipt')";

这一直有效,但我最近发现了一个致命缺陷。如果在数据库中客户购买了多个项目,则 SQL Server 的 XML 输出将是一个 XML 文件,其中为每个购买的项目重复该客户的信息。如果我在 C# 中解析 XML 输出,则无法完成,输出会导致多个根元素。我怀疑各种表的 JOIN 导致了这种情况,但我不得不从 SQL 中提取各种数据,我需要这些连接才能获得我需要的数据。

我尝试做类似的事情:

   ' '                          AS 'Total', 
' ' AS 'InvcHdrRcptStatus',
' ' AS 'InvcHdrRcptType',
' ' AS 'Cashier',
' ' AS 'DocDate',
' ' AS 'InvcNum',
(SELECT ps_doc_lin.sls_rep AS 'Clerk'
FROM PS_DOC_LIN
WHERE PS_DOC_LIN.DOC_ID = PS_DOC_HDR.DOC_ID
FOR XML PATH ('Item')) as Items,
(SELECT ar_cust.cust_no AS 'BillToCustNumber',
' ' AS 'BillToCustCompany',
ar_cust.fst_nam AS 'BillToFName',
ar_cust.lst_nam AS 'BillToLName',
ar_cust.salutation AS 'Customer/Name/Title',
ar_cust.adrs_1 AS 'BillToAddr1',
ar_cust.adrs_2 AS 'BillToAddr2',
' ' AS 'BillToAddr3',
ar_cust.zip_cod AS 'BillToZip',
' ' AS 'BillToInfo1',
' ' AS 'BillToInfo2',
' ' AS 'BillToPhone1',
' ' AS 'BillToPhone2',
ar_cust.phone_1 AS 'ShipToPhone1',
ar_cust.phone_2 AS 'ShipToPhone2' FROM AR_CUST WHERE AR_CUST.CUST_NO = PS_DOC_HDR.CUST_NO FOR XML PATH ('Customer'), TYPE) as Customers,

我将 JOIN 嵌套到另一个选择中。虽然这确实有效,但在转换为 JSON 时格式不正确。输出如下所示:

{"Receipt":{ ......//omitted data
,"Customer":{"Name: {"title":"Mr."}}

我的预期输出将在 {"Receipt": 中组织所有数据,而无需使用另一个 {。类似这样:

    "Receipt" : {
"InvcHdrNotes" : ""
"Tax" : ""
"TaxPrc" : ""
"DiscPrc" : ""
"Discount" : ""
"InvcComment1" : ""
"InvcComment2" : ""
}

“收据”是一个更大的 JSON 文件的一部分。但是,对于我需要获取的其余数据,此缺陷将被复制(我假设如此),因为我也需要 JOIN 来获取这些数据。我尝试同时使用 Jayrock 和 Newtonsoft.Json,但两者都有这个问题。

我的目标 XML 输出将是:

<Receipt>
<InvcHdrNotes> </InvcHdrNotes>
<Tax>Y</Tax>
<Clerk>MGR</Clerk>
<BillToCustNumber>1000</BillToCustNumber>
<BillToCustCompany> </BillToCustCompany>
<BillToFName>Bill</BillToFName>
<BillToLName>Baker</BillToLName>
<Customer>
<Name>
<Title>Mr.</Title>
</Name>
</Customer>
<BillToAddr1>1426 Millstream Parkway</BillToAddr1>
<BillToAddr3> </BillToAddr3>
<BillToZip>38120</BillToZip>
<BillToInfo1> </BillToInfo1>
<BillToInfo2> </BillToInfo2>
<ShipToCustNumber>1000</ShipToCustNumber>
<ShipToCustCompany> </ShipToCustCompany>
<ShipToFName>Bill</ShipToFName>
<ShipToLName>Baker</ShipToLName>
<ShipToTitle>Mr.</ShipToTitle>
<ShipToAddr1>1426 Millstream Parkway</ShipToAddr1>
<ShipToZip>38120</ShipToZip>
</Receipt>

我用上面的 SQL 代码得到了这个输出,但是在抛出我提到的异常之后重复了相同的信息。

这是否可能,或者这是一个致命的设计缺陷?如果不可能,我不确定如何完成此任务。谢谢。

最佳答案

看起来您正在将返回的每一行序列化为相同的 XML - 因此您最终会得到多个根元素。您需要序列化列表本身。

所以你最终会得到:

<Receipts>
<Receipt>
...
</Receipt>
<Receipt>
...
</Receipt>
</Receipts>

关于c# - 从SQL Server中提取XML数据解析成C#中的JSON格式化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com