我使用下面的泛型方法在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);
}
我可以通过其他方式对此进行优化吗?
答案 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);