2010-11-11 15 views
7

मैं बस कुछ अल्पविराम दृश्यपटल के लिए संख्या अलग शिफ्ट करने के लिए कोशिश कर रहा हूँ:JSON, ASP.NET MVC - MaxJsonLength अपवाद

[AcceptVerbs(HttpVerbs.Get)] 
public JsonResult GetSquares() 
{ 
var result = new JsonResult(); 
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
IList<double> list = new List<double>(); 
... 
result.Data = list; 
return result; 
} 

यह रूप में लंबे समय के रूप में वहाँ केवल कुछ ही नंबर दिए गए हैं ठीक काम करता है। दुर्भाग्य से, मैं कभी कभी संख्या के बहुत सारे बदलाव और एक MaxJsonLength अपवाद निकलना है। मैं इस पर काबू पाने के लिए (web.config फ़ाइल आदि के लिए कुछ जोड़ने के) कई सुझाव की कोशिश की। शायद मुझे JSON का उपयोग करने की ज़रूरत नहीं है? हालांकि मुझे अभी भी जावास्क्रिप्ट का उपयोग कर संख्याओं के साथ 'कुछ करना है'। मैं फिलहाल jquery के AJAX सामान का उपयोग कर रहा हूँ।

कोई सुझाव स्वागत है ...

उत्तर

1

यह काम नहीं करेगा?

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

यदि नहीं हो सकता है आप बस इसे पारित कर सकते हैं वापस एक स्ट्रिंग के रूप ...

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult GetSquares() 
{ 
    IList<double> list = new List<double>(); 
    .... 
    return Content(string.Join(",", list)); 
} 
+1

कोई इस – cs0815

+0

काम नहीं करता है की कोशिश सिर्फ वापस स्ट्रिंग गुजर, json आप क्या कर रहे के लिए overkill हो सकता है। आप एक संरचित वस्तु था मैं कहूंगा उपयोग json लेकिन अगर यह सिर्फ एक अल्पविराम से परे स्ट्रिंग है तो यह ठीक होना चाहिए। – hunter

5

Here is another custom JsonResult (CorrectJsonResult) जो बड़े क्रमबद्धता सीमा संभालती पर कि डिफ़ॉल्ट 4MB JavascriptConverter द्वारा अनुमति दी।

JsonResult उपवर्ग के बजाय And another example which uses ContentResult

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

मैं आधार वर्ग नियंत्रक विस्तार किया है और महान काम करते हैं:

ControllerExtensions वर्ग:

namespace SCAWEB.Helpers 
{ 
    public static class ControllerExtensions 
    { 
     #region Json 
     public static int MaxJsonLength{get;set;} 

     static ControllerExtensions() 
     { 
      MaxJsonLength = 2147483644; 
     } 

     public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data) 
     { 
      return new System.Web.Mvc.JsonResult() 
      { 
       Data = data, 
       MaxJsonLength = MaxJsonLength, 
      }; 
     } 
     public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data, System.Web.Mvc.JsonRequestBehavior behavior) 
     { 
      return new System.Web.Mvc.JsonResult() 
      { 
       Data = data, 
       JsonRequestBehavior = behavior, 
       MaxJsonLength = MaxJsonLength 
      }; 
     } 
     //TODO: You can add more overloads, the controller class has 6 overloads 
     #endregion 
    } 
} 

MyController वर्ग:

using SCAWEB.Helpers; 

namespace SCAWEB.Controllers 
{ 
    public class VentasController : Controller 
    { 
     public ActionResult VentasList(){ 
      //Todo: All the action code 

      //return this.Json(myData); 
      return this.LargeJson(myData);//Here I use my extensions 
     } 
    } 
} 

अपने कोड के अधिकतम लंबाई especify कर सकते हैं:

ControllerExtensions.MaxJsonLength = 1073741824;//1GB