C# 如何使用Newtonsoft或任何其他XML-to-JSON格式化程序将XML解析为以下格式的JSON
我使用Newtonsoft将XML转换为JSON,其中一个API使用JSON作为输入,但使用Newtonsoft我得到了不同的JSON结果,这与API不兼容C# 如何使用Newtonsoft或任何其他XML-to-JSON格式化程序将XML解析为以下格式的JSON,c#,json,xml,asp.net-mvc,json.net,C#,Json,Xml,Asp.net Mvc,Json.net,我使用Newtonsoft将XML转换为JSON,其中一个API使用JSON作为输入,但使用Newtonsoft我得到了不同的JSON结果,这与API不兼容 <packages> <Package> <trackingNumber>23780498191986</trackingNumber> <shipCost>14</shipCost> <shipDate>2018-04-1
<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>
但使用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;
}
我看不到不转换XML就可以做到这一点的方法。基本上,您需要将XML转换为以下格式 一种方法是将原始XML反序列化为模型A,将数据复制到模型B,然后将模型B序列化为JSON 模型类:
public class ModelA
{
public List<Package> Packages { get; set; }
...
}
public class ModelB
{
public List<Package> Packages { get; set; }
...
}
公共类ModelA
{
公共列表包{get;set;}
...
}
公共类模型B
{
公共列表包{get;set;}
...
}
目标XML:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<packages>
<trackingNumber>23780498191986</trackingNumber>
<shipCost>14</shipCost>
<shipDate>2018-04-12T15:33:39.887</shipDate>
<items>
<dscoItemId>sdsd</dscoItemId>
<sku>sdsd</sku>
<quantity>1</quantity>
<lineNumber>1</lineNumber>
<originalLineNumber>1</originalLineNumber>
<originalOrderQuantity>1</originalOrderQuantity>
</items>
<items>
<dscoItemId>CCCVSD33</dscoItemId>
<sku>TESRRST123</sku>
<quantity>2</quantity>
<lineNumber>2</lineNumber>
<originalLineNumber>2</originalLineNumber>
<originalOrderQuantity>2</originalOrderQuantity>
</items>
<shipCarrier />
<shipMethod />
<shippingServiceLevelCode>FESDPO</shippingServiceLevelCode>
<numberOfLineItems>2</numberOfLineItems>
<shipFrom>
<attention>OPERATIONS m</attention>
<firstName>SD</firstName>
<lastName>SD</lastName>
<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>
</packages>
</manifest>
23780498191986
14
2018-04-12T15:33:39.887
sdsd
sdsd
1.
1.
1.
1.
CCCVSD33
TESRRST123
2.
2.
2.
2.
FESDPO
2.
操作m
SD
SD
地址1
城市休息
哦
43123
美国
123.125.1265
SD
DD
DD
ABC公司
123好办法
F-1大楼
巴尔的摩
医学博士
21234
美国
222-222-2222
XYZ@ACOMP.COM
35
您可以尝试使用解决方案,它位于python@acoto这不是很有帮助,是吗?这是一个专门用JSON标记的问题。NETYou已经介绍了大量的XML和JSON-您能否将其简化为一个只有几个属性的小得多的示例?这将使比较预期结果和实际结果更加容易。
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<packages>
<trackingNumber>23780498191986</trackingNumber>
<shipCost>14</shipCost>
<shipDate>2018-04-12T15:33:39.887</shipDate>
<items>
<dscoItemId>sdsd</dscoItemId>
<sku>sdsd</sku>
<quantity>1</quantity>
<lineNumber>1</lineNumber>
<originalLineNumber>1</originalLineNumber>
<originalOrderQuantity>1</originalOrderQuantity>
</items>
<items>
<dscoItemId>CCCVSD33</dscoItemId>
<sku>TESRRST123</sku>
<quantity>2</quantity>
<lineNumber>2</lineNumber>
<originalLineNumber>2</originalLineNumber>
<originalOrderQuantity>2</originalOrderQuantity>
</items>
<shipCarrier />
<shipMethod />
<shippingServiceLevelCode>FESDPO</shippingServiceLevelCode>
<numberOfLineItems>2</numberOfLineItems>
<shipFrom>
<attention>OPERATIONS m</attention>
<firstName>SD</firstName>
<lastName>SD</lastName>
<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>
</packages>
</manifest>