序列化和反序列化ASP.Net Web服务返回的JSON对象

时间:2010-11-17 00:04:23

标签: asp.net json serialization

我有一个简单的ASP.Net Web服务/脚本方法,它返回一个JSON对象然后被修改并在回发期间发送回页面 - 我需要能够反序列化这个对象:

public class MyWebPage : Page
{
    [WebMethod]
    [ScriptMethod]
    public static MyClass MyWebMethod()
    {
        // Example implementation of my web method
        return new MyClass() 
        {
            MyString = "Hello World",
            MyInt = 42,
        };
    }

    protected void myButton_OnClick(object sender, EventArgs e)
    {
        // I need to replace this with some real code
        MyClass obj = JSONDeserialise(this.myHiddenField.Value);
    }
}

// Note that MyClass is contained within a different assembly
[Serializable]
public class MyClass : IXmlSerializable, ISerializable
{
    public string MyString { get; set; }
    public int MyInt { get; set; }
    // IXmlSerializable and ISerializable implementations not shown
}

我可以对网络方法MyWebMethod进行更改,也可以在某种程度上MyClass进行更改,但MyClass需要同时实现IXmlSerializableISerializable },并且包含在一个单独的程序集中 - 我提到这一点,因为这些已经给我带来了问题。

我该怎么做? (使用标准.Net类型或使用类似JSON.Net的东西)

2 个答案:

答案 0 :(得分:0)

您可以使用System.Web.Extensions中的JavaScriptSerializer类来反序列化JSON字符串。例如,以下代码将哈希转换为.NET字典对象:

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dict = new JavaScriptSerializer().Deserialize<Dictionary<string,int>>("{ a: 1, b: 2 }");
            Console.WriteLine(dict["a"]);
            Console.WriteLine(dict["b"]);
            Console.ReadLine();
        }
    }
}

代码输出为:

1
2

答案 1 :(得分:0)

JavaScriptSerializer是静态页面方法用于序列化其响应的类,因此它也适用于反序列化该特定JSON:

protected void myButton_OnClick(object sender, EventArgs e)
{
    string json = myHiddleField.Value;

    MyClass obj = new JavaScriptSerializer().Deserialize<MyClass>(json);
}