18

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

我怎么解决这个问题?

4

6 回答 6

35

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

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

编辑:为了打印带有缩进的 XML,您可以使用命名空间中的XDocumentSystem.Xml.LinqXDocument.Parse(doc.InnerXml)

于 2013-05-15T10:13:47.383 回答
4

我认为值得链接到将 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);
于 2013-07-01T00:19:05.520 回答
3

您也可以使用 .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));
    }
}
于 2015-09-05T11:24:25.610 回答
1

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;
于 2013-06-21T11:58:41.867 回答
0

您共享的 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"
         }
      ]
   }
}
于 2013-05-15T10:09:29.240 回答
0

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

XDocument xml = JsonConvert.DeserializeXNode(json);
于 2019-08-06T14:51:12.143 回答