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

Dad*_*To2 4 c# xml json json.net winforms

所有人,我知道这个问题已经被问过很多次了,我觉得我已经看过这里的每一个!我有一个 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"
  ]
]  
Run Code Online (Sandbox Code Playgroud)

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

XmlNode xml = JsonConvert.DeserializeXmlNode(body, "BiddingHistory");
Run Code Online (Sandbox Code Playgroud)

然后我想我会使用 DeserializeObject 函数,但同样,不起作用。

var jRst = JsonConvert.DeserializeObject(body);
Run Code Online (Sandbox Code Playgroud)

当我使用 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"
  ]
]}
Run Code Online (Sandbox Code Playgroud)

将对象转换为字符串后,我通过 XMLNodeConverter 运行它,但它在“#”字符上失败,所以我进行了字符串替换并取出了该字符(无论如何都不需要,我无法控制JSON 数据中出现了什么)然后再次运行我的代码。

XmlNode xml = JsonConvert.DeserializeXmlNode(sBody, "BiddingHistory");
Run Code Online (Sandbox Code Playgroud)

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

XmlNodeConverter 只能转换以对象开头的 JSON

有人可以在这里引导我朝着正确的方向前进吗?我认为这是一件很简单的事情,我把它复杂化了。

谢谢。

Rak*_*was 5

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

XmlNode xml = JsonConvert.DeserializeXmlNode(sBody, "BiddingHistory");
Run Code Online (Sandbox Code Playgroud)

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

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

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