在 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的主要内容,如果未能解决你的问题,请参考以下文章