【问题标题】:How to parse XML TO JSON in below format using Newtonsoft or any other XML to JSON formatter如何使用 Newtonsoft 或任何其他 XML 到 JSON 格式化程序以以下格式解析 XML 到 JSON
【发布时间】: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


【解决方案1】:

如果不转换 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; }
    ...
}

目标 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>

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2012-02-02
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多