web-dev-qa-db-ja.com

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"}

この問題を解決するにはどうすればよいですか?

15
lukso

質問で提供されたJSONが完全ではないという事実にもかかわらず、例外で示されているように、トップレベルに複数のプロパティがあります。有効なXMLを取得するには、ルートを定義する必要があります。

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

編集:インデント付きのXMLを出力するには、_System.Xml.Linq_名前空間のXDocumentクラスを使用できます:XDocument.Parse(doc.InnerXml)

30
jwaliszko

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

.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));
    }
}
3
Termininja

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;
1
tetris

共有JSONが無効です http://jsonformatter.curiousconcept.com/ に進み、最初にJSONを検証してください。

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

@ jwaliszko's answer を追加して、jsonをXDocumentに変換します。

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