Преобразование JSON в XML - программирование
Подтвердить что ты не робот

Преобразование JSON в XML

Я пытаюсь преобразовать вывод 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"}

Как я могу решить эту проблему?

4b9b3361

Ответ 1

Несмотря на то, что ваш JSON, предоставленный в вопросе, не является полным, у вас есть несколько свойств на верхнем уровне, как указано исключением. Вы должны определить корень для его получения XML:

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

EDIT: для того, чтобы распечатать свой XML с отступом, вы можете использовать класс XDocument из пространства имен System.Xml.Linq: XDocument.Parse(doc.InnerXml).

Ответ 2

Я думал, что стоит ссылаться на Документацию для превращения 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);

Ответ 3

Вы можете использовать JSON-to-XML также с помощью .NET Framework (System.Runtime.Serialization.Json):

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

Ответ 4

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;

Ответ 5

Ваш общий 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"
         }
      ]
   }
}