• .NET MVC Json()处理大数据异常解决方法


    【1-部分原文】: .NET MVC Json()处理大数据异常解决方法

    整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进行曲线图的绘制,这样比较形象地描绘出变化的趋势。由于数据量比较大(大于1000,000条记录),而highcharts接受的数据类型为json格式,所以controller从数据库中取出的数据需要先格式化成json,然后再传到前端。平时一直采用MVC的Json()将数据序列化成json格式,但是由于此次数据量较大,所以曲线不显示,所以一直以为是由于数据量较大,highcharts插件不支持100w级数据,后来听人说highcharts本身是支持100w级数据的。最后采用firebug调试才发现出现了错误:“使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过了为maxJsonLength属性设置的值”,网上也找了不少解决方案,几乎无一例外说的是在web.config的节点下添加:

    <system.web.extensions>
        <scripting>
            <webServices>
                <jsonSerialization maxJsonLength="1024000000" />
            </webServices>
        </scripting>
    </system.web.extensions>

    试过后发现曲线还是没出来,最后拿出杀手锏:谷歌翻译成英文,再次搜索,最后终于在stackoverflow上找到解决之法:

    public ActionResult GetLargeJsonResult()
    {
      return new ContentResult
        {
            Content = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(myBigdata),
            ContentType = "application/json"
        };
    }

    具体网址:http://stackoverflow.com/questions/4155014/json-asp-net-mvc-maxjsonlength-exception

    这里不得不大赞StackOverflow,好多问题都是在上面找到solution,而且上面还有非常多的好心人士热心细致的回答问题,我提了好几个问题都最终得到所谓Geek的帮助并得以解决。这里,我只想说声:谢谢。

    【2-实际应用】

    后端代码:

    ms = np.makeStream(); //excel字节流
    
    byte[] data = ms.ToArray();
    fileName = "Report_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xls";
    json = Json(new { Data = data, Status = true, FileName = fileName });
    
    new ContentResult
     {
         Content = new System.Web.Script.Serialization.JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(json),
                            ContentType = "application/json"
     };
    
    // 如果文件不是很大的话(文件大小的上限没有确认),可以直接用下面的方法,返回json即可
    
    // json = Json(new { Data = data, Status = true, FileName = fileName });

    前端代码

                $.ajax({
                    url: "/xx/xxx",
                    data: {
                        "a": a,
                        "b": "",
                        "c": c
                    },
                    dataType: "json",
                    type: "post",
                    success: function (result) {
                        if (result.Data && result.Data.Status) {
                            var byteArray = new Uint8Array(result.Data.Data);
                            var myBlob = new Blob([byteArray], { type: 'application/vnd.ms-excel' });
                            // saveAs 是FileSaver.js的方法
                            saveAs(myBlob, result.Data.FileName);
                            return;
                        } else {
                            alert(result.Msg);
                            return;
                        }
                    }
                });

     ===========END============

  • 相关阅读:
    一文带你快速认识“华为3D内容平台”!
    [论文解读] 阿里DIEN整体代码结构
    [论文阅读]阿里DIEN深度兴趣进化网络之总体解读
    [阿里DIN] 从论文源码学习 之 embedding层如何自动更新
    [阿里DIN]从论文源码学习 之 embedding_lookup
    [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构
    [阿里DIN] 深度兴趣网络源码分析 之 如何建模用户序列
    aspell命令
    买卖股票的最佳时机含手续费
    grep命令
  • 原文地址:https://www.cnblogs.com/dufu/p/9187275.html
Copyright © 2020-2023  润新知