私はajax呼び出しを使用して車両の詳細を取得しています。だから私はエラー "文字列の長さがmaxjsonlengthプロパティに設定された値を超えている"を取得するコントローラからビューの旅行の詳細を返す間。文字列の長さがmvcのmaxjsonlengthプロパティで設定された値を超えています
以下は、私が旅行の詳細を取得するために使用しているajaxコールです。旅行の詳細が巨大なときはいつでも、エラー機能に行く。
function LoadTripModalWindow(masterID, headwayPlanID, version, specialDay, applicableDay) {
//change this value after cpp service implementation
//version = 1;
/////////////////
if (headwayPlanID == 0 || headwayPlanID == null) {
$('#HeadwayPopUp').hide();
$('#NoTripGenerated').hide();
$('#NoHeadwayPopUp').show();
}
else {
$('#tripDialogDiv').hide();
$('#NoHeadwayPopUp').hide();
$.blockUI({ message: $('#msthrobber') });
var tripIn = '';
tripIn = '<table class="table table-bordered trip" id="tripInTableMS"> </table>';
$("#tripInTableMS").remove();
$("#TripIn").append(tripIn);
var tripOut = '';
tripOut = '<table class="table table-bordered trip" id="tripOutTableMS"> </table>';
$("#tripOutTableMS").remove();
$("#TripOut").append(tripOut);
$.ajax({
type: "GET",
url: "/ScheduleManagement/MasterConfiguration/GetTripTableDetails/",
data: { version: version, masterScheduleID: masterID, headwayPlanId: headwayPlanID, applicableDay: applicableDay, specialDay: specialDay },
dataType: "json",
context: this,
success: function (data) {
var returnedData = JSON.parse(data);
var tripIn = returnedData.TripIn;
var tripOut = returnedData.TripOut;
var TripInHeadwayPlan = returnedData.TripInHeadwayPlan;
var TripOutHeadwayPlan = returnedData.TripOutHeadwayPlan;
var TripInRoute = returnedData.TripInRoute;
var TripOutRoute = returnedData.TripOutRoute;
var ShiftDetails = returnedData.AssignedShifts;
if ((tripIn == null || tripIn.length == 0) && (tripOut == null || tripOut.length == 0)) {
//if (tripIn == null && tripOut == null) {
$.unblockUI();
$('#tripDialogDiv').show();
$('#HeadwayPopUp').hide();
$('#NoTripGenerated').show();
}
else {
var shiftDetail = '<label"> Shift Details :</label> ';
for (var s = 0; s < ShiftDetails.length; s++) {
shiftDetail += ' <input type="text" class="shift-details Shift' + (parseInt(s) + 1) + ' " disabled>' +
'<label style="color: slategrey;">' + ShiftDetails[s].shiftName + '(' + ShiftDetails[s].startTime.substring(0, 5) + ' - ' + ShiftDetails[s].endTime.substring(0, 5) + ')</label> ';
}
$("#ShiftDetails").html('');
$("#ShiftDetails").append(shiftDetail);
if (tripIn != null) {
var tripInTable = new triptable('tripInTableMS', '0', 'btnAddCol1', 'btnTripSave', 'btnTrip1Remove', tripIn, TripInHeadwayPlan, TripInRoute, TripOutRoute, ShiftDetails);
}
if (tripOut != null) {
var tripOutTable = new triptable('tripOutTableMS', '1', 'btnAddCol2', 'btnTripSave', 'btnTrip2Remove', tripOut, TripOutHeadwayPlan, TripInRoute, TripOutRoute, ShiftDetails);
}
$.unblockUI();
$('#tripDialogDiv').show();
$('#HeadwayPopUp').show();
$('#NoTripGenerated').hide();
$("#TripInBox").show();
$("#TripOutBox").hide();
}
},
error: function (response) {
alert("error : " + response);
}
});
}
}
私は自分のアプリケーションのコードの下に追加されました。
private static void AddToBackingStore(JsonDotNetValueProviderFactory.EntryLimitedDictionary backingStore, string prefix, object value)
{
IDictionary<string, object> dictionary = value as IDictionary<string, object>;
if (dictionary != null)
{
foreach (KeyValuePair<string, object> keyValuePair in (IEnumerable<KeyValuePair<string, object>>)dictionary)
JsonDotNetValueProviderFactory.AddToBackingStore(backingStore, JsonDotNetValueProviderFactory.MakePropertyKey(prefix, keyValuePair.Key), keyValuePair.Value);
}
else
{
IList list = value as IList;
if (list != null)
{
for (int index = 0; index < list.Count; ++index)
JsonDotNetValueProviderFactory.AddToBackingStore(backingStore, JsonDotNetValueProviderFactory.MakeArrayKey(prefix, index), list[index]);
}
else
backingStore.Add(prefix, value);
}
}
private static object GetDeserializedObject(ControllerContext controllerContext)
{
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
return (object)null;
string end = new StreamReader(controllerContext.HttpContext.Request.InputStream).ReadToEnd();
if (string.IsNullOrEmpty(end))
return (object)null;
var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue };
return serializer.DeserializeObject(end);
}
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
if (controllerContext == null)
throw new ArgumentNullException("controllerContext");
object deserializedObject = JsonDotNetValueProviderFactory.GetDeserializedObject(controllerContext);
if (deserializedObject == null)
return (IValueProvider)null;
Dictionary<string, object> dictionary = new Dictionary<string, object>((IEqualityComparer<string>)StringComparer.OrdinalIgnoreCase);
JsonDotNetValueProviderFactory.AddToBackingStore(new JsonDotNetValueProviderFactory.EntryLimitedDictionary((IDictionary<string, object>)dictionary), string.Empty, deserializedObject);
return (IValueProvider)new DictionaryValueProvider<object>((IDictionary<string, object>)dictionary, CultureInfo.CurrentCulture);
}
private static string MakeArrayKey(string prefix, int index)
{
return prefix + "[" + index.ToString((IFormatProvider)CultureInfo.InvariantCulture) + "]";
}
private static string MakePropertyKey(string prefix, string propertyName)
{
if (!string.IsNullOrEmpty(prefix))
return prefix + "." + propertyName;
return propertyName;
}
private class EntryLimitedDictionary
{
private static int _maximumDepth = JsonDotNetValueProviderFactory.EntryLimitedDictionary.GetMaximumDepth();
private readonly IDictionary<string, object> _innerDictionary;
private int _itemCount;
public EntryLimitedDictionary(IDictionary<string, object> innerDictionary)
{
this._innerDictionary = innerDictionary;
}
public void Add(string key, object value)
{
if (++this._itemCount > JsonDotNetValueProviderFactory.EntryLimitedDictionary._maximumDepth)
throw new InvalidOperationException("JsonValueProviderFactory_RequestTooLarge");
this._innerDictionary.Add(key, value);
}
private static int GetMaximumDepth()
{
NameValueCollection appSettings = ConfigurationManager.AppSettings;
if (appSettings != null)
{
string[] values = appSettings.GetValues("aspnet:MaxJsonDeserializerMembers");
int result;
if (values != null && values.Length > 0 && int.TryParse(values[0], out result))
return result;
}
return 1000;
}
}
そしてglobal.ascxファイルで、私はそれが数ヶ月の罰金働いていたライン
foreach (var factory in ValueProviderFactories.Factories)
{
if (factory.GetType().FullName == "System.Web.Mvc.JsonValueProviderFactory")
{
jsonFactory = factory;
break;
}
}
if (jsonFactory != null)
{
ValueProviderFactories.Factories.Remove(jsonFactory);
}
ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory());
の下に追加されました。もう一度データの長さが増え、再びエラーが発生するようになりました。
この問題を解決するための提案があれば教えてください。
を参照してください申し訳ありません..私は私の質問を完了するのに逃しました。今更新しました。今すぐチェックしてください – vIDHU
JavaScriptSerializer中に[MaxJsonLength exception in ASP.NET MVC]の可能な複製(https://stackoverflow.com/questions/5692836/maxjsonlength-exception-in-asp-net-mvc-during-javascriptserializer) – mjwills