2013-08-29 3 views
1

У меня есть структура JSON, как показано ниже.Преобразование JSON в XML с использованием JavaScriptSerializer в C#

json={ 
    "page": { 
     "mode": "2", 
     "ref": "user" 
    } 
} 

Я использую следующий код для преобразования JSON в XML.

Ссылка: http://www.flowgearcoder.net/2013/04/03/convert-between-json-and-xml

var dynamicObject = new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(Json); 
     System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(dynamicObject.GetType()); 

     MemoryStream ms = new MemoryStream(); 
     serializer.Serialize(ms, dynamicObject); 

     Xml = System.Text.Encoding.UTF8.GetString(ms.ToArray()); 

Я получаю следующее сообщение об ошибке при выполнении преобразования XMLSerializer.

Тип System.Collections.Generic.Dictionary`2 [[System.String, mscorlib, версия = 2.0.0.0, культура = нейтральной, PublicKeyToken = b77a5c561934e089], [System.Object, mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]] is не поддерживается, потому что он реализует IDictionary.

Может ли кто-нибудь помочь мне разобраться в этой проблеме?

+0

Почему ты хотите преобразовать его в XML? Просто спрашивайте, потому что в предыдущем вопросе кто-то хотел сначала преобразовать в XML, а затем десериализовать xml в объекты. Если это ваш план, вам лучше десериализовать сам json. – havardhu

+0

http://stackoverflow.com/questions/679050/how-to-return-generic-dictionary-in-a-webservice См. Предыдущий QA для информации – havardhu

+0

@havardhu , Я хочу преобразовать JSON в HTML. SO на первом этапе я конвертирую JSON в XML, а затем в HTML. Вы можете определить проблему? –

ответ

0

JavaScriptSerializer.DeserializeObject cast json string to Dictionary<String, Object>.

Словарь не поддерживается XMLSerializer. Поэтому, если вы сами создаете json, вы можете изменить его структуру и использовать метод JavaScriptSerializer.Deserialize<T>, чтобы передать его определенному классу, а последний сериализовать его в XML.

0

В качестве альтернативы JavaScriptSerializer, вы можете использовать Json.NET:

using System; 
using System.Collections.Generic; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
using System.Xml; 

public class Test 
{ 
    public static void Main() 
    { 
     var json = @"{""page"": {""mode"": ""2"", ""ref"": ""user""}}"; 
     var xmlDocument = new XmlDocument(); 
     var d= xmlDocument.CreateXmlDeclaration("1.0","utf-8","yes"); 
     xmlDocument.AppendChild(d); 
     var xml = JsonConvert.DeserializeXmlNode(json); 
     var root = xmlDocument.ImportNode(xml.DocumentElement,true); 
     xmlDocument.AppendChild(root); 
     Console.WriteLine(xmlDocument.OuterXml); 
    } 
} 

Выходы:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<page><mode>2</mode><ref>user</ref></page> 
0

Он легко может быть преобразован в XML с помощью Json.Net

string xml = JsonConvert.DeserializeXNode(json).ToString(); 
Смежные вопросы