【问题标题】:Converting JSON to XML将 JSON 转换为 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"}

我该如何解决这个问题?

【问题讨论】:

    标签: c# json xml converter


    【解决方案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));
            }
        }
        

        【讨论】:

        【解决方案6】:

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

        XDocument xml = JsonConvert.DeserializeXNode(json);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-30
          • 2017-08-07
          • 2018-08-15
          • 2014-07-30
          • 2017-07-04
          • 2012-02-08
          相关资源
          最近更新 更多