将 JSON 转换为 XML
Posted
技术标签:
【中文标题】将 JSON 转换为 XML【英文标题】:Converting JSON to XML 【发布时间】:2013-05-09 20:25:23 【问题描述】:我试图将 JSON 输出转换为 XML。不幸的是,我收到了这个错误:
JSON 根对象有多个属性。根对象必须具有单个属性才能创建有效的 XML 文档。考虑指定一个 DeserializeRootElementName。
这是我迄今为止创建的。
string url = string.Format("https://graph.facebook.com/0?fields=posts.fields(message)&access_token=1", user_name, access_token);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
StreamReader reader = new StreamReader(response.GetResponseStream());
jsonOutput = reader.ReadToEnd();
Console.WriteLine("THIS IS JSON OUTPUT: " + jsonOutput);
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonOutput);
Console.WriteLine(doc);
这是我的 JSON 输出:
"id":"108013515952807","posts":"data":["id":"108013515952807_470186843068804","created_time":"2013-05-14T20:43:28+0000","message":"TEKST","id":"108013515952807_470178529736302","created_time":"2013-05-14T20:22:07+0000"
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:您共享的 JSON 无效,请先通过 http://jsonformatter.curiousconcept.com/ 验证您的 JSON。
您的 JSON 应如下所示:
"id":"108013515952807",
"posts":
"data":[
"id":"108013515952807_470186843068804",
"created_time":"2013-05-14T20:43:28+0000"
,
"message":"TEKST",
"id":"108013515952807_470178529736302",
"created_time":"2013-05-14T20:22:07+0000"
]
【讨论】:
【参考方案2】:尽管您在问题中提供的 JSON 不完整,但您在***有多个属性,如异常所示。您必须为其定义根才能获得有效的 XML:
var doc = JsonConvert.DeserializeXmlNode(jsonOutput, "root");
编辑:为了打印带有缩进的 XML,您可以使用 XDocument
命名空间中的 XDocument
类:XDocument.Parse(doc.InnerXml)
。
【讨论】:
你知道如何显示 XML 吗?我得到这个 System.Xml.XmlDocument :( 您可以使用System.Xml.Linq
命名空间中的 XDocument
类来打印带有缩进的 XML:XDocument.Parse(doc.InnerXml)
。【参考方案3】:
DeserializeXmlNode 返回 XDcument。 如果需要 XNode,请使用 FirstNode。
//string jsonOutput=""id":"108013515952807","posts":"data":["id":"108013515952807_470186843068804","created_time":"2013-05-14T20:43:28+0000","message":"TEKST","id":"108013515952807_470178529736302","created_time":"2013-05-14T20:22:07+0000"";
var myelement= JsonConvert.DeserializeXmlNode(jsonOutput, "myelement").FirstNode;
【讨论】:
方法错误。对 XDocument 使用 DeserializeXNode(...)【参考方案4】:我认为值得链接到Documentation for turning xml to json and the other way around。
这些家伙是对的..
// To convert an XML node contained in string xml into a JSON string
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);
// To convert JSON text contained in string json into an XML node
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);
【讨论】:
【参考方案5】:您也可以使用 .NET Framework (System.Runtime.Serialization.Json) 执行 JSON 到 XML:
private static XDocument JsonToXml(string jsonString)
using (var stream = new MemoryStream(Encoding.ASCII.GetBytes(jsonString)))
var quotas = new XmlDictionaryReaderQuotas();
return XDocument.Load(JsonReaderWriterFactory.CreateJsonReader(stream, quotas));
【讨论】:
谢谢..:)。不错的答案 我的 XML 返回一个类型。如何删除类型示例添加@jwaliszko's answer,将json转换为XDocument
:
XDocument xml = JsonConvert.DeserializeXNode(json);
【讨论】:
以上是关于将 JSON 转换为 XML的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 将 XML 转换为 JSON(并返回)
使用 Javascript 将 XML 转换为 JSON(并返回)
使用 Javascript 将 XML 转换为 JSON(并返回)