现在我有一些数据如下:
{"parameters":{"fields":["a","b","c"]}
我使用ajax将请求发送到.net WebMethod,如下所示:
$.ajax({
url: 'Query/Query.asmx/test2?nocache=1',
dataType: "json",
data: JSON.stringify(data),
type: 'POST',
contentType: "application/json; charset=utf-8",
})
我在query.asmx中使用的WebMethod是:
[WebMethod]
public string test2(Dictionary<string, object> parameters)
{
return "ok";
}
我们可以看到parameters["fields"]
的类型为System.Object[]
但是现在我需要压缩数据并在后端解压缩,数据变成一个字符串(解压后)。现在我想将它反序列化为与之前完全相同的类型。
解压缩后,数据变为JSON字符串:
"{\"parameters\":{\"fields\":[\"a\",\"b\",\"c\"]}}"
现在我想使用JavaScriptSerializer将其反序列化为相同的类型。但我能得到的是parameters["fields"]
System.Collections.ArrayList
类型,而不是我需要的类型System.Object[]
。
代码如下所示
public class TestDataObject
{
public Dictionary<string, object> parameters { get; set; }
}
-
var serializer = new JavaScriptSerializer();
var a = serializer.Deserialize<TestDataObject>(d);
所以问题是:我有没有办法将它反序列化为完全相同的类型?我不能使用另一个库,因为我已经为一些自定义类型实现了一些javascriptSerializer转换器。
答案 0 :(得分:1)
您可以将字典中的值类型更改为object[]
而不是object
:
public class TestDataObject
{
public Dictionary<string, object[]> parameters { get; set; }
}
string json = "{\"parameters\":{\"fields\":[\"a\",\"b\",\"c\"]}}";
var serializer = new JavaScriptSerializer();
var a = serializer.Deserialize<TestDataObject>(json);
a.parameters["fields"].GetType() == typeof(object[]); //equals True
答案 1 :(得分:1)
在JavascriptSerializer
中,有一个方法ConvertToType
可用于将对象转换为类实例。调用DeserializeObject()
后,结果类型正是我想要的。所以,代码可以是:
var b = serializer.DeserializeObject(d);
var c = serializer.ConvertToType(b, typeof(TestDataObject));