web-dev-qa-db-fra.com

Conversion de JSON en XML

J'essaie de convertir la sortie JSON en XML. Malheureusement, je reçois cette erreur:

L'objet racine JSON a plusieurs propriétés. L'objet racine doit avoir une seule propriété pour créer un document XML valide. Envisagez de spécifier un DeserializeRootElementName.

C'est ce que j'ai créé jusqu'à présent.

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

Et voici ma sortie 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"}

Comment puis-je résoudre ce problème?

15
lukso

Bien que votre JSON fourni dans la question ne soit pas complet, vous disposez de plusieurs propriétés au niveau supérieur, comme indiqué par l'exception. Vous devez définir la racine pour obtenir un XML valide:

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

EDIT: Afin d'imprimer votre XML avec indentation, vous pouvez utiliser la classe XDocument de l'espace de noms System.Xml.Linq: XDocument.Parse(doc.InnerXml).

30
jwaliszko

J'ai pensé qu'il valait la peine de créer un lien vers Documentation pour transformer xml en json et inversement .

Les gars ont raison ..

// 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);
4
Yotam Omer

Vous pouvez également faire du JSON vers XML en utilisant le .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));
    }
}
3
Termininja

DeserializeXmlNode renvoie XDcument. Si nécessaire, XNode utilise 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;
1
tetris

Votre JSON partagé n'est pas valide, veuillez passer par http://jsonformatter.curiousconcept.com/ et valider votre JSON en premier.

Votre JSON devrait ressembler à:

{
   "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"
         }
      ]
   }
}
0
Navin Rawat

Ajout sur @ réponse de jwaliszko , conversion de json en XDocument:

XDocument xml = JsonConvert.DeserializeXNode(json);
0
HeyJude