【问题标题】:How to handle large set of Json Data in MVC?如何在 MVC 中处理大量 Json 数据?
【发布时间】: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


【解决方案1】:

在 web.config 中添加以下内容,看看是否能解决您的问题。

 <system.webServer>  
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="52428800" />
      </requestFiltering>
    </security>
</system.webServer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2014-06-12
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多