2016-11-08 187 views
2

尝试创建json时,我不断收到此错误。这是完整的错误使用JSON JavaScriptSerializer进行序列化或反序列化时出错。

Error during serialization or deserialization using the JSON 
JavaScriptSerializer. The length of the string exceeds 
the value set on the maxJsonLength property. 

我的代码如下

public ActionResult ChangeRequests_Read([DataSourceRequest] DataSourceRequest request) 
    { 
     var data = GetRequests(); 
     var serializer = new JavaScriptSerializer(); 
     var result = new ContentResult(); 
     serializer.MaxJsonLength = Int32.MaxValue; // Whatever max length you want here 
     result.Content = serializer.Serialize(data.ToDataSourceResult(request)); 
     result.ContentType = "application/json"; 
     return result; 

     //return Json(GetRequests().ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
    } 

,从这里拉这

public static IEnumerable<ChangeRequestsVM> GetRequests() 
    { 
     var model = CompanyContextFactory.GetContextPerRequest(); 
     var chrwVM = model.ChangeRequestsHDRs.Where(ch=> ch.CompanyID == GlobalVariables.CompanyID).Select(ch=> new ChangeRequestsVM 
     { 
      RequestID = ch.RequestID, 
      CompanyID = ch.CompanyID, 
      ClientID = ch.ClientID, 
      EmployeeID = (string.IsNullOrEmpty(ch.EmployeeID)) ? "NA" : ch.EmployeeID, 
      AssignmentType = ch.AssignmentType, 
      Key1 = ch.Key1, 
      Key2 = ch.Key2, 
      LogonID = ch.LogonID, 
      ProcessDate = ch.ProcessDate, 
      ProcessTime = ch.ProcessTime, 
      ProcessUserID = ch.ProcessUserID, 
      RequestDate = ch.RequestDate, 
      RequestExport = ch.RequestExport, 
      RequestNote = ch.RequestNote, 
      RequestOrigin = Convert.ToChar(ch.RequestOrigin), 
      RequestProcess = ch.RequestProcess, 
      RequestStatus = ch.RequestStatus, 
      RequestTime = ch.RequestTime, 
      RequestType = Convert.ToChar(ch.RequestType), 
      ResponseNote = ch.ResponseNote, 
      TableName = ch.TableName, 
      TransferDate = ch.TransferDate, 
      TransferTime = ch.TransferTime, 
      TransferUserID = ch.TransferUserID, 
      dispOrigin = (Convert.ToChar(ch.RequestOrigin) == ChangeRequestOrigin.System) ? "System" : (Convert.ToChar(ch.RequestOrigin) == ChangeRequestOrigin.Client) ? "Client" : "Employee", 
      dispRequestType = (Convert.ToChar(ch.RequestType) == ChangeRequestType.Insert) ? "Insert" : (Convert.ToChar(ch.RequestType) == ChangeRequestType.Alter) ? "Change" : "Delete", 
      dispStatus = FieldTranslation.GetEnumDescription(typeof(enChangeRequestStatus), ch.RequestStatus ?? 0) 
     }).OrderByDescending(ch=> ch.RequestID); 
     return chrwVM; 
    } 

为什么我的JSON超过长度是多少?我已经做到了,所以该方法只从数据库中提取一个项目,但仍然出现错误。

+0

也许你的领域之一,有太多的数据,比如'ch.RequestNote'或'ch.ResponseNote'。 –

+0

如果使用'JavaScriptSerializer'对你来说不是一个硬性要求,那么我建议你切换到Json.NET。 –

回答

1

你需要增加MaxJsonLength属性的大小:

https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.maxjsonlength.aspx

这是在配置文件中完成的。详情请参阅上面的链接。

更新:

由于您使用MVC,您可以使用下面的应用程序设置:

<appSettings> 
    <add key="aspnet:MaxJsonDeserializerMembers" value="123456789" /> 
... 
</appSettings> 

但是,要知道,这是一个潜在的安全风险。在这里阅读更多:

https://msdn.microsoft.com/en-us/library/hh975440(v=vs.120).aspx

+0

这已经完成 – TheDizzle

相关问题