C#:如何反序列化json字符串以获得与webmethod参数相同的结果?

时间:2018-04-13 06:03:54

标签: c# asp.net .net javascriptserializer

现在我有一些数据如下:

{"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转换器。

2 个答案:

答案 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));