2013-10-07 33 views
0

我正在檢索JSON,但由於其長度有限(2147483644),我收到此錯誤。如何在使用JSON JavaScriptSerializer進行序列化或反序列化時捕獲錯誤

我該如何發現這個錯誤?

使用JSON進行序列化或反序列化時出錯 JavaScriptSerializer。字符串的長度超過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"; 
      } 

    } 

回答

2

在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"; 
    } 
} 
+0

Thanks.Is有被送回的字符串的長度的任何限制? – lostpacket

+0

我想這會因客戶而異。但我不確定。在達到最大長度之前,我已經擊中了OOM異常。你的數據有多大!?!大聲笑,也許你需要做一個每日下降或東西;-) – Faraday

+0

它有所不同。在JSON中,我可以在{'時間':1381186243,'值':123.4}乘以1000或5000或甚至更高,如果用戶要求更寬的時間範圍或在很短的時間內收集大量值。 – lostpacket

相關問題