将JSON转换为XML

本文关键字:XML 转换 JSON | 更新日期: 2023-09-27 18:13:33

我试图将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"}

我该如何解决这个问题?

将JSON转换为XML

尽管问题中提供的JSON并不完整,但正如异常所示,在顶层有多个属性。您必须为它定义根以获得有效的XML:

var doc = JsonConvert.DeserializeXmlNode(jsonOutput, "root");

编辑:为了打印出缩进的XML,您可以使用System.Xml.Linq命名空间中的XDocument类:XDocument.Parse(doc.InnerXml)

我认为将xml转换为json和其他方式的文档值得链接。

这些家伙是对的…

// 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);

你也可以使用。net Framework (System.Runtime.Serialization.Json)实现JSON-to-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));
    }
}

DeserializeXmlNode返回xdocument。如果需要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;

您共享的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"
         }
      ]
   }
}

添加@jwaliszko的答案,将json转换为XDocument:

XDocument xml = JsonConvert.DeserializeXNode(json);