C#:如何反序列化 json 字符串以获得与 webmethod 参数相同的结果?
C#: How to deserialize json string to get the same result as webmethod parameter?
现在我有一些数据如下:
{"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 转换器。
您可以将字典中的值类型更改为 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
在JavascriptSerializer
中,有一个方法ConvertToType
可以用来将对象转换为class实例。 DeserializeObject()
调用后,结果类型正是我想要的。所以,代码可以是:
var b = serializer.DeserializeObject(d);
var c = serializer.ConvertToType(b, typeof(TestDataObject));
现在我有一些数据如下:
{"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 转换器。
您可以将字典中的值类型更改为 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
在JavascriptSerializer
中,有一个方法ConvertToType
可以用来将对象转换为class实例。 DeserializeObject()
调用后,结果类型正是我想要的。所以,代码可以是:
var b = serializer.DeserializeObject(d);
var c = serializer.ConvertToType(b, typeof(TestDataObject));