JavaScriptSerializer需要很长时间来反序列化WCF json数据

时间:2013-12-24 12:44:18

标签: c# json wcf javascriptserializer

我使用下面的泛型方法在wcf应用程序中反序列化我的json响应。但是,将大约5 MB的数据反序列化需要很长时间。

程序执行总是卡在下面一行:

T[] arrResult = objJsonserialiser.Deserialize<T[]>(objResponseString);

public ObservableCollection<T> InvokeGet<T>(string sUrl )
{

    System.Net.WebRequest request = System.Net.HttpWebRequest.Create(sUrl);

    request.Method = "GET";

    request.UseDefaultCredentials = true;

    request.ContentLength = 0;

    System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse;

    Stream objResponseStream = response.GetResponseStream();

    StreamReader reader = new StreamReader(objResponseStream);

    string objResponseString = reader.ReadToEnd();

    response.Close();

    JavaScriptSerializer objJsonserialiser = new JavaScriptSerializer();

    objJsonserialiser.MaxJsonLength = 999999999;

    T[] arrResult = objJsonserialiser.Deserialize<T[]>(objResponseString);

    return new ObservableCollection<T>(arrResult);  
   }

我可以通过其他方式对此进行优化吗?

2 个答案:

答案 0 :(得分:1)

我使用Newtonsoft.Json对json数据进行反序列化,性能提升了大约80%。

T [] arrResult = JsonConvert.DeserializeObject(objResponseString);

答案 1 :(得分:0)

在网上搜索时,我发现javascript serialiser需要时间来解析Json。我希望你使用Json.net作为Json Parsing比较快。

然而试试这个。它将以Key Value对的形式返回结果,并检查它是否正常工作。

var test = objJsonserialiser.Deserialize<IDictionary<string, object>>(objResponseString);