【发布时间】:2017-01-01 13:29:17
【问题描述】:
如何处理大量的 JsonData?
我返回的数据包含 200k+ 行。
我已经将 web 配置文件设置为 ff。
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
我还添加了密钥。
<add key="aspnet:MaxJsonDeserializerMembers" value="2147483647 " />
问题是,当我在 jsonResult 上设置断点时,它会返回行,但我在浏览器上收到错误消息,提示 抛出了“System.OutOfMemoryException”类型的异常。。
这是我在控制器上的代码
var jsonResult = Json(listofParticipant);
jsonResult.MaxJsonLength = int.MaxValue;
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsonResult;
更新
我也尝试使用Stream,这样结果就不会留在内存中我仍然得到OutOfMemoryException
using (StreamWriter sw = new StreamWriter(@"D:\json.txt"))
{
using (JsonWriter writer = new JsonTextWriter(sw))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(writer, listofParticipant);
}
}
var xserializer = new JsonSerializer();
using (var sr = new StreamReader(@"D:\json.txt"))
using (var jsonTextReader = new JsonTextReader(sr))
{
var xx = xserializer.Deserialize<List<PatricipantSearchViewModel>>(jsonTextReader);
return Json(xx, "application/json", Encoding.Default, JsonRequestBehavior.AllowGet);
}
我还根据 SO 中的答案添加了此代码。
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new JsonResult()
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding,
JsonRequestBehavior = behavior,
MaxJsonLength = Int32.MaxValue
};
}
【问题讨论】:
-
您是否尝试过使用 JSON.Net 或 StackOverflow 的 JSON 反序列化器而不是返回 JsonResult 尝试返回文本?
-
是的,我已经尝试过 JSON.Net,但在序列化具有 200k 行的列表时仍然返回 System.OutOfMemoryException
-
这是大量数据,最终会占用大量内存。你有能力“分页”数据吗?
标签: angularjs json asp.net-mvc