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

Posted

技术标签:

【中文标题】在 C# 中将 JSON 数组转换为 XML【英文标题】:Converting JSON Array to XML in C# 【发布时间】:2016-12-05 19:46:35 【问题描述】:

所有,我知道这个问题已经被问过很多次了,我觉得我已经看过这里的每一个问题了!我有一个 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 运行它,但它在“#”字符上失败了,所以我做了一个字符串替换并取出了那个字符(反正不需要,我也不需要控制 JSON 数据中的内容)然后再次运行我的代码。

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

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

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

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

谢谢。

【问题讨论】:

试过这个XmlDocument xdoc = JsonConvert.DeserializeXmlNode(yourjson);? 你能分享一下 json 的模型类吗?那我可以试试 在JSON objects and JSON Arrays查看更多信息 【参考方案1】:

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

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

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

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

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

【讨论】:

Rakitić,我正在尝试这样做以查看它是否有效,但在我的构建中出现错误。错误是:System.Xml.XmlDocument 不包含“ToXmlString”的定义,并且找不到接受“System.XmlDocument”类型的第一个参数的扩展方法“ToXmlString”。我确实在我的代码中使用了 System.Xml 和 Newtonsoft.Json。还有什么我可能会错过的东西来试试这个吗? 抱歉,回车太快了。上面的错误。 您一定在代码中的某处声明了XmlDocument xmlDoc = new XmlDocument();...尝试将XmlDocument 替换为XDocument 在插入您的建议后,我确​​实有五行确切的行,所以我把它拿出来,重建,仍然有同样的错误。这是我在您的行和之后的三行代码中的代码: XmlNode xml = JsonConvert.DeserializeXmlNode("\"Row\":" + sbody + "", "BiddingHistory").ToXmlString(); var xmlReader = new XmlNodeReader(xml);数据集数据集 = 新数据集(); dataSet.ReadXml(xmlReader); 这个项目度过了一个漫长的周末。我刚刚意识到您的建议(仅进行了非常小的调整)有效,并且 JSON 现在是 XML 格式。感谢拉基蒂奇的帮助。现在开始填充这个数据集。再次感谢大家!【参考方案2】:

使用来自 nuget Service Stack 的服务堆栈

添加对您的程序的引用

using ServiceStack;

将您的 json 转换为对象

var jRst = JsonConvert.DeserializeObject(body);

之后,您可以使用下面的服务堆栈获取 xml

var xml = jRst.ToXml();

【讨论】:

以上是关于在 C# 中将 JSON 数组转换为 XML的主要内容,如果未能解决你的问题,请参考以下文章

在c#中将简单的json转换为字符串数组

将单个xml节点作为数组转换为json

在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素

如何在c#中将对象转换为数组? [关闭]

如何在 C# 中将嵌套列表转换为 XML

将 XML 转换为 Java 中的 JSON,其中子节点作为数组