将 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 返回一个类型。如何删除类型示例 true @KristinaLex 在此处检查 cmets ***.com/questions/814001/…【参考方案6】:

添加@jwaliszko's answer,将json转换为XDocument

XDocument xml = JsonConvert.DeserializeXNode(json);

【讨论】:

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

使用 Javascript 将 XML 转换为 JSON(并返回)

使用 Javascript 将 XML 转换为 JSON(并返回)

使用 Javascript 将 XML 转换为 JSON(并返回)

将 XML 转换为 JSON 格式

C# - 如何将复杂的 json 转换为 XML,并将名称和值属性转换为标签

使用 XSL 将 json 转换为 XML