c# - 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。

标签 c# json

我在尝试创建 json 时不断收到此错误。这是完整的错误

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 超长了?我做到了,所以该方法只从数据库中提取一项,但仍然出现错误。

最佳答案

您需要增加 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

关于c# - 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40494775/

相关文章:

javascript - 类型错误 : 'application/json' is not a valid JavaScript MIME type

javascript - 循环并从 JSON 中提取值并将其推送到数组

C# 在启动批处理流时卡住

c# - PInvoke SLAPI 函数

c# - 如何从文件位置添加图像 WPF

mysql - 将 NSURLConnection 替换为 NSURLSession 以下载和解析 json 提要

java - Http请求在浏览器中返回不同的响应

javascript - 如何将我自己的数据添加到响应式美国各州 map 中?

c# - .NET 和 PCL(点云库)

c# - WCF 数据服务,序列化 Entity Framework 部分类的附加属性