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?
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)
.
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);
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));
}
}
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;
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"
}
]
}
}
Ajout sur @ réponse de jwaliszko , conversion de json en XDocument
:
XDocument xml = JsonConvert.DeserializeXNode(json);