将XML字符串转换为JSON字符串不会产生预期的结果

时间:2014-07-14 13:48:16

标签: json json.net

我正在使用NewtonSoft.JSON来解析XML文档并构建JSON字符串但是我没有获得所需的输出。我的xml字符串在下面给出

<fulfillment>
       <tracking_number/>
        <line_items>
              <id>466157049</id>
              <quantity>1</quantity>
          </line_items>
   </fulfillment>

将XML转换为JSON后,它给出了以下JSON

{"fulfillment":{"tracking_number":"er2222222","line_items":{"id":"464194075","quantity":"1"}}}

但是我需要JSON如下所示,因为我的XML cam包含多个line_items数据。上面和下面的JSON之间的差异是行项目元素之后的数组括号。当我在xml中使用两个line_items时,它提供了所需的结果,但是使用单个line_items,它不会在line_items部分中返回类似JSON格式的数组。

{"fulfillment":{"tracking_number":"er2222222","line_items":[{"id":"464194075","quantity":"1"}]}}

解决问题的方法是什么。

由于 Utpal Maity

1 个答案:

答案 0 :(得分:0)

您需要在xml中进行一些更改。它应该是这样的:

<fulfillment xmlns:json='http://james.newtonking.com/projects/json'>
  <tracking_number>er2222222</tracking_number>
  <line_items json:Array='true'>
    <id>466157049</id>
    <quantity>1</quantity>
  </line_items>
</fulfillment>

使用JSON.NET对此xml示例进行序列化将生成所需的json字符串。添加多个line_items节点将提供预期结果。多个line_items的示例:

<fulfillment xmlns:json='http://james.newtonking.com/projects/json'>
  <tracking_number>er2222222</tracking_number>
  <line_items json:Array='true'>
    <id>466157049</id>
    <quantity>1</quantity>
  </line_items>
  <line_items>
    <id>466157050</id>
    <quantity>2</quantity>
  </line_items>
</fulfillment>

使用上面的xml示例调用以下代码:

var xml = new XmlDocument();
xml.Load("Location of the xml file");
var jsonStr = JsonConvert.SerializeXmlNode(xml);

将产生以下json字符串:

{
    "fulfillment": {
        "tracking_number": "er2222222",
        "line_items": [
            {
                "id": "466157049",
                "quantity": "1"
            },
            {
                "id": "23",
                "quantity": "2"
            }
        ]
    }