【问题标题】:How to catch error during serialization or deserialization using the JSON JavaScriptSerializer如何使用 JSON JavaScriptSerializer 在序列化或反序列化期间捕获错误
【发布时间】:2013-10-07 21:26:46
【问题描述】:

我正在检索 JSON,但由于其长度有限 (2147483644),我收到此错误。

我怎样才能发现这个错误?

使用 JSON 进行序列化或反序列化时出错 JavaScript 序列化器。字符串长度超过设置的值 在 maxJsonLength 属性上。

这就是我现在的编码方式。

[HttpGet]
        public JsonResult GetSearchData(string filter)
        { 
            IRemediationService svc = new RemediationService();
            var data = svc.SearchData(filter);
            try{
              return Json(data, JsonRequestBehavior.AllowGet);
            }catch(Exception e){
              return "Error";
            }

    }

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    在 MVC 4 中你可以这样做:

    protected override JsonResult GetSearchData(string filter)
    {
        IRemediationService svc = new RemediationService();
        var data = svc.SearchData(filter);
        try
        {
            return new JsonResult()
                {
                    Data = data,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    MaxJsonLength = Int32.MaxValue
                };
        }
        catch (Exception e)
        {
            return "Error";
        }
    }
    

    您可以检查数据并修剪您的对象。

    如果不是,也许您可​​以将其作为字符串传回...

    protected override ActionResult GetSearchData(string filter)
    {
        IRemediationService svc = new RemediationService();
        var data = svc.SearchData(filter);
        try
        {
            return Content(data.ToString());
        }
        catch (Exception e)
        {
            return "Error";
        }
    }
    

    【讨论】:

    • 谢谢。发回的字符串长度有限制吗?
    • 我猜这会因客户而异。但我不确定。在达到最大长度之前,我已经遇到了 OOM 异常。你的数据有多大!?!大声笑,也许你需要每天做一次下降或其他事情;-)
    • 情况不同。在 JSON 中,如果用户要求更宽的时间范围或在短时间内收集到大量值,我可以说在 {'Time': 1381186243 , 'Value' : 123.4} 乘以 1000 或 5000 甚至更高之间。
    • 使用第一种方法 MaxJsonLength = Int32.MaxValue
    • 好的。让我说清楚。所以我可以将任何 JSON 对象乘以 21474836 作为我可以发送回浏览器的 JSON 对象的数量?
    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 2015-01-11
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多