我有一个简单的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
需要同时实现IXmlSerializable
和ISerializable
},并且包含在一个单独的程序集中 - 我提到这一点,因为这些已经给我带来了问题。
我该怎么做? (使用标准.Net类型或使用类似JSON.Net的东西)
答案 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);
}