使用c#中的JavaScriptSerializer将JSON转换为XML

时间:2013-08-29 06:38:22

标签: c# xml json

我有一个类似下面的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]]是   不支持,因为它实现了IDictionary。

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

JavaScriptSerializer.DeserializeObject将json字符串转换为Dictionary<String, Object>

XMLSerializer不支持Dictionary。因此,如果您自己创建json,可能需要更改其结构并使用JavaScriptSerializer.Deserialize<T>方法将其强制转换为特定类,然后将其序列化为XML。

答案 1 :(得分: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>

答案 2 :(得分:0)

可以使用Json.Net

轻松转换为xml
string xml = JsonConvert.DeserializeXNode(json).ToString();