【发布时间】:2018-04-18 19:43:47
【问题描述】:
我正在使用 Newtonsoft 将 XML 转换为 JSON,其中一个 API 使用 JSON 作为输入,但使用 Newtonsoft 我得到了与 API 不兼容的不同 JSON 结果。
<packages>
<Package>
<trackingNumber>23780498191986</trackingNumber>
<shipCost>14</shipCost>
<shipDate>2018-04-12T15:33:39.887</shipDate>
<items>
<Item>
<dscoItemId>sdsd</dscoItemId>
<sku>sdsd</sku>
<quantity>1</quantity>
<lineNumber>1</lineNumber>
<originalLineNumber>1</originalLineNumber>
<originalOrderQuantity>1</originalOrderQuantity>
</Item>
<Item>
<dscoItemId>CCCVSD33</dscoItemId>
<sku>TESRRST123</sku>
<quantity>2</quantity>
<lineNumber>2</lineNumber>
<originalLineNumber>2</originalLineNumber>
<originalOrderQuantity>2</originalOrderQuantity>
</Item>
</items>
<shipCarrier />
<shipMethod />
<shippingServiceLevelCode>FESDPO</shippingServiceLevelCode>
<numberOfLineItems>2</numberOfLineItems>
<shipFrom>
<attention>OPERATIONS m</attention>
<firstName>SD</firstName>
<lastName>SD</lastName>
<company></company>
<address1>ADD1</address1>
<address2 />
<city>URBANCREST</city>
<region>OH</region>
<postal>43123</postal>
<country>US</country>
<phone>123.125.1265</phone>
<email />
<locationCode />
</shipFrom>
<shipTo>
<attention>SD</attention>
<firstName>DD</firstName>
<lastName>DD</lastName>
<company>ABC CORPORATION</company>
<address1>123 FINE WAY</address1>
<address2>BUILDING F-1</address2>
<city>BALTIMORE</city>
<region>MD</region>
<postal>21234</postal>
<country>US</country>
<phone>222-222-2222</phone>
<email>XYZ@ACOMP.COM</email>
<locationCode />
</shipTo>
<shipWeight>35.00</shipWeight>
</Package>
想要为我的测试应用中的一个 API 转换为以下格式
"packages": [
{
"trackingNumber": "7804981212191986",
"shipCost": 14,
"shipDate": "2018-04-12T15:33:39.887",
"items": [
{
"dscoItemId": 10312120074055,
"sku": "ABC11223",
"quantity": 1,
"lineNumber": 1,
"originalLineNumber": 1,
"originalOrderQuantity": 1
}
],
"shipCarrier": null,
"shipMethod": null,
"shippingServiceLevelCode": "FEPO",
"numberOfLineItems": 1,
"shipFrom": {
"attention": "OPERATIONS manager",
"firstName": "sd",
"lastName": "Ysd",
"company": "sd",
"address1": "Add1",
"city": "URBANCREST",
"region": "OH",
"postal": "43123",
"country": "US",
"phone": "123.212.1235"
},
"shipTo": {
"attention": "Attention: GROUP A",
"firstName": "MO",
"lastName": "WK",
"company": "ABC CORPORATION",
"address1": "123 FINE WAY",
"address2": "BUILDING F-1",
"city": "BALTIMORE",
"region": "MD",
"postal": "21234",
"country": "US",
"phone": "222-222-2222",
"email": "JOE@ACOMP.COM"
},
"shipWeight": "35.00"
}
]
但是使用 Newtonsoft 我得到以下结果,这对于我在一个测试应用程序中使用的 API 无效。
"packages": {
"Package": {
"trackingNumber": "780498193231986",
"shipCost": "14.14",
"shipDate": "2018-04-12T15:33:39.887",
"items": {
"Item": [
{
"dscoItemId": "AAVVCAACF",
"sku": "ABC123",
"quantity": "1",
"lineNumber": "1",
"originalLineNumber": "1",
"originalOrderQuantity": "1"
},
{
"dscoItemId": "CCCAAV33",
"sku": "TEST123",
"quantity": "2",
"lineNumber": "2",
"originalLineNumber": "2",
"originalOrderQuantity": "2"
}
]
},
"shipCarrier": null,
"shipMethod": null,
"shippingServiceLevelCode": "FEPO",
"numberOfLineItems": "2",
"shipFrom": {
"attention": "OPERATIONS manager",
"firstName": "asas",
"lastName": "asas",
"company": "asas",
"address1": "Add1",
"address2": null,
"city": "URBANCREST",
"region": "OH",
"postal": "43123",
"country": "US",
"phone": "125.125.1235",
"email": null,
"locationCode": null
},
"shipTo": {
"attention": "Attention: GROUP A",
"firstName": "sa",
"lastName": "sd",
"company": "ABC CORPORATION",
"address1": "123 FINE WAY",
"address2": "BUILDING F-1",
"city": "BALTIMORE",
"region": "MD",
"postal": "21234",
"country": "US",
"phone": "222-222-2222",
"email": "JOE@ACOMP.COM",
"locationCode": null
}
以下我用于将 XML 转换为 JSON 的代码
private static string XmlToJSONWithJSONNet(String xmlDoc)
{
string jsonString = string.Empty;
XmlDocument xd = new XmlDocument();
xd.LoadXml(Convert.ToString(xmlDoc));
jsonString = JsonConvert.SerializeXmlNode(xd,Newtonsoft.Json.Formatting.None, true);
return jsonString;
}
【问题讨论】:
-
你可以试试this解决方案,在python中
-
@acoto 那不是很有帮助,不是吗?这是一个专门用 JSON.NET 标记的问题
-
您已经展示了大量的 XML 和 JSON - 您能否将其简化为只有几个属性的更小的示例?这将使比较预期结果和实际结果变得更加容易。
标签: c# json xml asp.net-mvc json.net