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

现在我有一些数据如下:


{"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"]is类型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转换器,因此无法使用其他库。


慕的地10843
浏览 173回答 2
2回答

SMILET

在中JavascriptSerializer,有一种方法ConvertToType可用于将对象转换为类实例。之后DeserializeObject()被调用,结果类型正是我想要的。因此,代码可以是:&nbsp; &nbsp; var b = serializer.DeserializeObject(d);&nbsp; &nbsp; var c = serializer.ConvertToType(b, typeof(TestDataObject));
打开App,查看更多内容
随时随地看视频慕课网APP