使用c#中的JavaScriptSerializer将JSON转换为XML
本文关键字:转换 XML JSON 中的 JavaScriptSerializer 使用 | 更新日期: 2023-09-27 18:29:30
我有一个JSON结构,如下所示。
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。
有人能帮我解决这个问题吗?
使用Json.Net 可以很容易地将其转换为xml
string xml = JsonConvert.DeserializeXNode(json).ToString();
JavaScriptSerializer.DeserializeObject将json字符串强制转换为Dictionary<String, Object>
。
XMLSerializer不支持字典。因此,如果您自己创建json,您可能需要更改其结构,并使用JavaScriptSerializer.Deserialize<T>
方法将其强制转换为特定的类,然后将其序列化为XML。
作为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>