Korzystam z funkcji autouzupełniania jQuery. Kiedy próbuję pobrać listę ponad 17000 rekordów (każda nie będzie miała więcej niż 10 znaków), przekracza ona długość i zgłasza błąd:
Informacje o wyjątku:
Typ wyjątku: InvalidOperationException
Komunikat o wyjątku: Błąd podczas serializacji lub deserializacji przy użyciu JSON JavaScriptSerializer. Długość łańcucha przekracza wartość ustawioną we właściwości maxJsonLength.
Czy mogę ustawić nieograniczoną długość dla maxJsonLength
w web.config
? Jeśli nie, jaka jest maksymalna długość, którą mogę ustawić?
asp.net
asp.net-mvc
json
Prasad
źródło
źródło
Odpowiedzi:
UWAGA: ta odpowiedź dotyczy tylko usług sieciowych, jeśli zwracasz JSON z metody kontrolera, pamiętaj również o przeczytaniu poniższej SO: https://stackoverflow.com/a/7207539/1246870
Właściwość MaxJsonLength nie może być nieograniczona, jest to liczba całkowita, której domyślna wartość to 102400 (100k).
Możesz ustawić
MaxJsonLength
właściwość na swoim web.config:źródło
2147483647
taka, jak wskazują @depsart i @ Descár.return Json()
lub czegoś takiegoJeśli używasz MVC 4 , koniecznie sprawdź również tę odpowiedź .
Jeśli nadal pojawia się błąd:
maxJsonLength
maksymalnej wartości właściwości w pliku web.configTwój problem prawdopodobnie:
Zasadniczo „wewnętrzny”
JavaScriptSerializer
szanuje wartośćmaxJsonLength
wywołania z metody internetowej; bezpośrednie użycieJavaScriptSerializer
(lub użycie za pomocą metody akcji / kontrolera MVC) nie szanujemaxJsonLength
właściwości, przynajmniej nie zsystemWebExtensions.scripting.webServices.jsonSerialization
sekcji web.config.Aby obejść ten problem, w kontrolerze (lub w dowolnym innym miejscu) możesz wykonać następujące czynności:
Ta odpowiedź jest moją interpretacją odpowiedzi na forum asp.net .
źródło
Json()
metody wynik działania w asp.net mvc.W MVC 4 możesz:
w twoim kontrolerze.
Dodanie:
Dla każdego, kto jest zaskoczony parametrami, które musisz określić, połączenie może wyglądać następująco:
źródło
Możesz skonfigurować maksymalną długość żądań json w pliku web.config:
Domyślna wartość parametru maxJsonLength to 102400 . Aby uzyskać więcej informacji, zobacz tę stronę MSDN: http://msdn.microsoft.com/en-us/library/bb763183.aspx
źródło
jeśli po ustawieniu pliku web.config nadal pojawia się błąd, taki jak:
Rozwiązałem to, wykonując następujące czynności:
Mam nadzieję, że to powinno pomóc.
źródło
Miałem ten problem w formularzach sieci Web ASP.NET. Całkowicie ignorowałem ustawienia pliku web.config, więc zrobiłem to:
Oczywiście ogólnie jest to okropna praktyka. Jeśli wysyłasz tyle danych w ramach połączenia z serwisem internetowym, powinieneś spojrzeć na inne podejście.
źródło
Naprawiłem to.
Pracuje bardzo dobrze.
źródło
Postępowałem zgodnie z odpowiedzią szczątkowego i znalazłem rozwiązanie:
Gdy potrzebowałem wysłać dużego jsona do akcji w kontrolerze, otrzymałem słynny „Błąd podczas deserializacji za pomocą JSON JavaScriptSerializer. Długość łańcucha przekracza wartość ustawioną we właściwości maxJsonLength. \ R \ n Nazwa parametru: input dostawca wartości ”.
Utworzyłem nową ValueProviderFactory, LargeJsonValueProviderFactory i ustawiłem MaxJsonLength = Int32.MaxValue w metodzie GetDeserializedObject
Następnie w metodzie Application_Start z Global.asax.cs zamień ValueProviderFactory na nową:
źródło
jeśli po zaimplementowaniu powyższego dodatku w pliku web.config pojawi się „Nierozpoznana sekcja konfiguracji system.web.extensions”. błąd, a następnie spróbuj dodać to do pliku web.config w
<ConfigSections>
sekcji:źródło
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
, jak widać na tej stronie: forums.asp.net/t/1446510.aspx/1możesz napisać ten wiersz w kontrolerze
możesz również napisać ten wiersz w
web.config
`
Aby być bezpiecznym, użyj obu.
źródło
Jeśli otrzymujesz ten błąd z MiniProfiler w MVC, możesz zwiększyć wartość, ustawiając właściwość
MiniProfiler.Settings.MaxJsonResponseSize
na pożądaną wartość. Domyślnie to narzędzie wydaje się ignorować wartość ustawioną w config.Dzięki uprzejmości mini-profilera mvc .
źródło
Wystarczy ustawić właściwość MaxJsonLength w metodzie Action MVC
źródło
Sugeruję ustawienie go na Int32.MaxValue.
źródło
Co powiesz na magię atrybutów?
Następnie możesz zastosować go globalnie, używając globalnej konfiguracji filtra lub kontrolera / akcji.
źródło
Pytanie naprawdę brzmi, czy naprawdę musisz zwrócić 17k rekordów? Jak zamierzasz obsługiwać wszystkie dane w przeglądarce? Użytkownicy i tak nie będą przewijać 17000 wierszy.
Lepszym podejściem jest pobranie tylko „kilku pierwszych” rekordów i załadowanie większej liczby zgodnie z wymaganiami.
źródło
Możesz ustawić go w konfiguracji, jak powiedzieli inni, lub możesz ustawić indywidualne wystąpienie serializatora, takie jak:
źródło
Dla tych, którzy mają problemy z MVC3 z JSON, który jest automatycznie usuwany z postaci szeregowej dla segregatora modeli i jest zbyt duży, oto rozwiązanie.
Dzięki http://blog.naver.com/techshare/100145191355 i https://gist.github.com/DalSoft/1588818 za wskazanie mi właściwego kierunku, jak to zrobić. Ostatni link na pierwszej stronie zawiera pełny kod źródłowy rozwiązania.
źródło
Jeśli napotykasz tego rodzaju problem w widoku, możesz go rozwiązać, korzystając z poniższej metody. Tutaj użyłem pakietu Newtonsoft .
źródło
źródło
Wygląda na to, że nie ma wartości „nieograniczonej”. Domyślnie jest to 2097152 znaków, co odpowiada 4 MB ciągów znaków Unicode.
Jak już zaobserwowano, 17 000 rekordów jest trudnych w użyciu w przeglądarce. Jeśli prezentujesz widok zagregowany, może być znacznie bardziej wydajne wykonanie agregacji na serwerze i przesłanie tylko podsumowania w przeglądarce. Na przykład, rozważmy przeglądarkę systemu plików, widzimy tylko górę drzewa, a następnie wysyłamy kolejne żądania podczas drążenia w dół. Liczba rekordów zwracanych w każdym żądaniu jest stosunkowo niewielka. Prezentacja widoku drzewa może dobrze działać w przypadku dużych zestawów wyników.
źródło
Właśnie na to wpadłem. Dostaję ponad 6000 rekordów. Właśnie zdecydowałem, że zrobię trochę stronicowania. W chwili obecnej akceptuję numer strony w moim punkcie końcowym MVC JsonResult, który jest domyślnie ustawiony na 0, więc nie jest to konieczne, na przykład:
Następnie zamiast mówić:
Mówię:
To jest bardzo proste. Następnie w JavaScript zamiast tego:
Zamiast tego mówię:
I w pierwszej kolejności dołączaj swoje nagrania do wszystkiego, co z nimi robiłeś. Lub po prostu poczekaj, aż wszystkie połączenia zakończą się i połącz wyniki razem.
źródło
Rozwiązałem problem dodając ten kod:
źródło
string confString = HttpContext.Request.ApplicationPath.ToString(); var conf = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(confString); var section = (System.Web.Configuration.ScriptingJsonSerializationSection)conf.GetSection("system.web.extensions/scripting/webServices/jsonSerialization"); section.MaxJsonLength = int.MaxValue; conf.Save();
Alternatywna poprawka ASP.NET MVC 5:
(Mój jest podobny do powyższej odpowiedzi MFC z kilkoma małymi zmianami)
Nie byłem jeszcze gotowy na przejście na Json.NET i w moim przypadku błąd występował podczas żądania. Najlepszym podejściem w moim scenariuszu było zmodyfikowanie tego,
JsonValueProviderFactory
który stosuje poprawkę do projektu globalnego i można tego dokonać, edytującglobal.cs
plik jako taki.dodaj wpis web.config:
a następnie utwórz dwie następujące klasy
Jest to w zasadzie dokładna kopia domyślnej implementacji znaleziona w,
System.Web.Mvc
ale z dodaną konfigurowalną wartością ustawienia web.configaspnet:MaxJsonLength
.źródło
Rozwiązanie dla WebForms UpdatePanel:
Dodaj ustawienie do Web.config:
https://support.microsoft.com/en-us/kb/981884
ScriptRegistrationManager
klasa zawiera następujący kod:źródło
Nie potrzebujemy żadnych zmian po stronie serwera. możesz to naprawić tylko modyfikując za pomocą pliku web.config Pomogło mi to. wypróbuj to
źródło
posługiwać się
lib\Newtonsoft.Json.dll
źródło
Naprawa dla ASP.NET MVC: jeśli chcesz to naprawić tylko dla określonej akcji powodującej problem, napisz następujący kod:
możesz to zmienić:
A funkcjonalność powinna być taka sama, możesz po prostu zwrócić większy JSON jako odpowiedź.
Objaśnienie oparte na kodzie źródłowym ASP.NET MVC: możesz sprawdzić, co
Controller.Json
robi metoda w kodzie źródłowym ASP.NET MVCWywołuje inną
Controller.Json
metodę:gdzie są przekazywane
contentType
icontentEncoding
obiektnull
. Więc w zasadzie wywołaniereturn Json(object)
kontrolera jest równoważne z wywołaniemreturn new JsonResult { Data = object, JsonRequestBehavior = sonRequestBehavior.DenyGet }
. Możesz użyć drugiego formularza i sparametryzowaćJsonResult
.Co się stanie, gdy ustawisz
MaxJsonLength
właściwość (domyślnie jest ona pusta)? Jest przekazywany doJavaScriptSerializer.MaxJsonLength
właściwości, a następnie wywoływanaJavaScriptSerializer.Serialize
jest metoda :A jeśli nie ustawisz
MaxJsonLenght
właściwości serializatora, wówczas przyjmuje ona wartość domyślną, która wynosi zaledwie 2 MB.źródło
jeśli ta wartość maxJsonLength jest liczbą int, to jak duża jest jej int 32bit / 64bit / 16bit .... chcę tylko mieć pewność, jaką maksymalną wartość mogę ustawić jako moją maksymalną długość
źródło
Nie musisz robić z web.config Możesz użyć krótkiej właściwości podczas wartości catch listy przechodzącej Na przykład zadeklaruj model jak
tutaj używam krótkich proporcji, takich jak BC = kod kreskowy BE = wydanie książki i tak dalej
źródło