在C#中将JSON数组转换为XML

时间:2016-07-31 17:48:44

标签: c# json xml winforms json.net

所有,我知道这个问题已被多次询问过,我觉得我已经在这里看过每一个问题!我有一个C#Winforms应用程序正在调用外部webhook,提取JSON格式的数据。我需要获取此数据并将其转换为数据表,并将最终结果导入数据库。我坚持的事情,并且已经持续了一天半,试图将JSON数据解析为XML。

以下是我从webhook获取的JSON数据(示例):

 [
  ["Item Title",
   "Bidder Name",
   "Bidder Email",
   "Bidder Phone Number",
   "Bidder Username",
   "Bid Amount",
   "Bid Time",
   "Operation",
   "Auto Bid Amount",
   "Bidder Address",
   "Bidder City",
   "Bidder State",
   "Bidder Country"
  ],
  ["Test item 1(#)"],
  ["",
   "Tom Kelly",
   "tomkelly7630@gmail.com",
   "6303278300",
   "testaccount",
   "50.0",
   "07/09/2016 07:17 PM CDT",
   "Bid Amount",
   null,
   null,
   null,
   null,
  "US"
  ]
]  

起初我尝试使用DeserializeXMLNode函数,但这没有用。

XmlNode xml = JsonConvert.DeserializeXmlNode(body, "BiddingHistory");

然后我想我会使用DeserializeObject函数,但是再次,不工作。

var jRst = JsonConvert.DeserializeObject(body);

当我使用DeserializeObject函数时,我得到以下结果:

    {[
  [
    "Item Title",
    "Bidder Name",
    "Bidder Email",
    "Bidder Phone Number",
    "Bidder Username",
    "Bid Amount",
    "Bid Time",
    "Operation",
    "Auto Bid Amount",
    "Bidder Address",
    "Bidder City",
    "Bidder State",
    "Bidder Country"
  ],
  [
    "Test Item 1"
  ],
  [
    "",
    "Tom Kelly",
    "tomkelly7630@gmail.com",
    "6303278300",
    "testaccount",
    "75.0",
    "07/30/2016 06:14 PM CDT",
    "Bid Amount",
    null,
    null,
    null,
    null,
    "US"
  ]
]}

将对象转换为字符串后,我通过XMLNodeConverter运行它,并且它在#34;#"上失败了。字符,所以我做了一个字符串替换并取出了那个字符(无论如何都不需要,我无法控制JSON数据中的内容)然后再次运行我的代码。

XmlNode xml = JsonConvert.DeserializeXmlNode(sBody, "BiddingHistory");

所以现在我得到的是这个错误:

  

XmlNodeConverter只能转换以对象

开头的JSON

有人请指引我朝这个正确的方向前进吗?我认为这是一件很简单的事情,而且我过于复杂。

感谢。

2 个答案:

答案 0 :(得分:1)

您收到错误,因为您的JSON数据是一个数组,您所做的是:

XmlNode xml = JsonConvert.DeserializeXmlNode(sBody, "BiddingHistory");

上面的代码行只适用于JSON对象。

因此,如果你的JSON是一个数组,那么试试这个:

XmlNode xml = JsonConvert.DeserializeXmlNode("{\"Row\":" + sBody + "}", "BiddingHistory").ToXmlString();

答案 1 :(得分:1)

使用nuget Service Stack

中的服务堆栈

添加对您的计划的引用

using ServiceStack;

将您的json转换为对象

var jRst = JsonConvert.DeserializeObject(body);

之后,您可以使用服务堆栈获取xml,如下所示

var xml = jRst.ToXml();