2013-05-15 16 views
14

JSON出力をXMLに変換しようとしています。残念ながら私はこのエラーを受け取ります:JSONをXMLに変換する

JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document. Consider specifing a 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"} 

どのように私はこの問題を解決することができますか?

答えて

25

が完了していない例外によって示されるように、あなたはトップレベルで複数のプロパティがあります。

Yourt JSONは次のようになります。

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

EDIT:XDocument.Parse(doc.InnerXml):あなたはSystem.Xml.Linq名前空間からXDocumentクラスを使用することができますインデントを使用してXMLをプリントアウトするためには、それが有効なXMLを取得するためのルートを定義する必要があります。

+0

あなたが表示する方法のアイデアを持っていますかXML?私はこのSystem.Xml.XmlDocumentのを取得する:( – lukso

+1

あなたはインデントを使用してXMLを印刷するSystem.Xml.Linq'名前空間 'から' XDocument'クラスを使用することができます。 'XDocument.Parse(doc.InnerXml)' – jwaliszko

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" 
     } 
     ] 
    } 
} 
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; 
+0

間違った方法を。 XDocumentにDeserializeXNode(...)を使用 – Fried

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

あなたは、.NET Frameworkの(System.Runtime.Serialization.Json)を使用しても、XML 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)); 
    } 
} 
+1

ありがとう.. :)いい答え –

関連する問題