2013-12-11 20 views
5

Tôi có một ứng dụng MVC3 chạy dưới .NET 4.0 và khi tôi sử dụng JavascriptSerializer.Deserialize Tôi gặp lỗi.Web.config jsonSerialization maxJsonLength bỏ qua

Lỗi trong quá trình tuần tự hóa hoặc deserialization bằng cách sử dụng JSON JavaScriptSerializer. Độ dài của chuỗi vượt quá giá trị được đặt trên thuộc tính maxJsonLength.

Đọc Can I set an unlimited length for maxJsonLength in web.config Tôi đặt khóa jsonSerialization maxJsonLength trong web.config của mình nhưng bị bỏ qua. Mặc dù tôi có thể thiết lập các tài sản JavaScriptSerializer.MaxJsonLength trong mã và nó hoạt động tốt.

Tôi muốn có giá trị trong số Web.config thay vì mã. Đây là cách tôi đang sử dụng JavaScriptSerializer.

Dim client As New WebClient 
... 
Dim result = _client.DownloadString("Test") 
Dim serializer = New JavaScriptSerializer 
Return serializer.Deserialize(Of Foo)(result) 

Đây là tôi Web.config

<configuration> 
    <configSections> 
    ... 
    </configSections> 
    <appSettings> 
    ... 
    </appSettings> 
    <system.web> 
    <customErrors mode="On"> 
     <error statusCode="404" redirect="/Http404"/> 
     <error statusCode="403" redirect="/Http403"/> 
     <error statusCode="550" redirect="/Http550"/> 
    </customErrors> 
    <compilation debug="true" targetFramework="4.0"/> 
    <pages controlRenderingCompatibilityVersion="4.0"> 
     <namespaces> 
     <add namespace="System.Web.Helpers"/> 
     <add namespace="System.Web.Mvc"/> 
     <add namespace="System.Web.Mvc.Ajax"/> 
     <add namespace="System.Web.Mvc.Html"/> 
     <add namespace="System.Web.Routing"/> 
     <add namespace="System.Web.WebPages"/> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.web.extensions> 
    <scripting> 
     <webServices> 
     <jsonSerialization maxJsonLength="50000000"/> 
     </webServices> 
    </scripting> 
    </system.web.extensions> 
<system.webServer> 
.... 
</system.webServer> 
</configuration> 

Trả lời

10

Theo liên kết mà bạn cung cấp (thứ 2 câu trả lời đã bỏ phiếu nhất), thiết lập web.config của bạn sẽ bị bỏ qua vì bạn đang sử dụng một nội dụ của số JavaScriptSerializer.

Nếu bạn cần các giá trị được lưu trữ trong web.config, bạn có thể thêm một chìa khóa trong phần <appSettings> gọi maxJsonLength với một giá trị của 50000000 và sau đó trong mã của bạn, bạn có thể sử dụng nó như:

var serializer = new JavaScriptSerializer(); 
serializer.MaxJsonLength = ConfigurationManager.AppSettings['maxJsonLength']; 
+1

Bạn nên in đậm ** nội bộ **. Đó là những gì tôi hiểu sai! –

+0

Xong. Cũng chỉ cần nhận ra tôi đã cho bạn một ví dụ C#, đã không nhìn thấy thẻ vb.net của bạn cho đến bây giờ :) – lhan