【问题标题】:Error during serialization or deserialization using the JSON JavaScriptSerializer. MVC Kendo Grid Binding使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。 MVC 剑道网格绑定
【发布时间】:2015-10-09 13:21:18
【问题描述】:

我正在使用 Ienumerable 而不是 Json Data 将数据绑定到 Kendo 网格。

我收到此错误: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串长度超过 maxJsonLength 属性设置的值。

即使尝试在 web.config 中设置低于 maxjsonlength

<system.web.extensions>
<scripting>
  <webServices>

    <jsonSerialization maxJsonLength="2147483647" />
  </webServices>
</scripting>

这是我的剑道网格

@model IEnumerable<AssetTrackingSystem.Model.SampleDetailsSummary>
    @(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns=>
{
    columns.Bound(p => p.JobNumber).Title("Job Number").Width("125px");
    columns.Bound(p => p.SampleNumber).Template(@<text></text>).ClientTemplate("<a href='" + Url.Action("SampleDetails", "JobDetails", new { AssetId = "#=AssetId#" }) + "'>#=SampleNumber#</a>").Title("Sample Number").Width("125px");
    columns.Bound(p => p.SampleType).Title("Sample Type").Width("125px");
    columns.Bound(p => p.ServiceVendor).Title("Service Vendor").Width("125px");
    columns.Bound(p => p.BarCode).Title("Barcode").Width("125px");
    columns.Bound(p => p.LocationName).Title("Current Location").Width("125px");
    columns.Bound(p => p.GPS).Title("GPS").Width("125px");     
}).Pageable().Sortable().Scrollable(scr => scr.Height(scroolheight)).Filterable().Pageable(pageable => pageable
       .Refresh(true)
       .PageSizes(true)
       .ButtonCount(5)).DataSource(dataSource => dataSource
   .Ajax()
   .PageSize(50)
   .ServerOperation(false)
   .Model(model => model.Id(p => p.AssetId))
)

这是我的控制器操作方法

   public ActionResult CompanyAssets()
    {
        Guid CompanyId = new Guid(Request.Params["CompanyId"].ToString());
        int GPSOnly = int.Parse(Request.Params["Gps"]);
        //bool GPSOnly = GPSOnly1.Equals("1") ? true : false;
        JobDetailsRepository rep = new JobDetailsRepository(Session["Connectionstring"].ToString());
        //   IList<AssetDetails> assetinfo = rep.GetAssetsByCompanyId(CompanyId);

        IList<SampleDetailsSummary> assetinfo = rep.GetAllSamplesByCompanyId(CompanyId, GPSOnly);
        CompanyRepository cmprep = new CompanyRepository(Session["Connectionstring"].ToString());
        // IList<CompanyInfoSummary> s = cmprep.GetLocationsByCompanyId(CompanyId);
        var company = cmprep.GetCompany(CompanyId);
        ViewBag.companyName = company.CompanyName;
        var model = assetinfo;
        return View(model);
    }

任何人都可以帮我解决这个问题吗?我试图解决这些花费 24 小时的问题

【问题讨论】:

    标签: json asp.net-mvc serialization kendo-ui kendo-grid


    【解决方案1】:

    您的问题可能是您将网格绑定到具有循环引用的对象..

    例如..

    public class Employee 
    {
        public Company Company {get;set}
    }
    public class Company
    {
        public Employee Owner { get; set}
    }
    

    由于员工有公司,公司有员工,因此序列化程序将陷入无限循环。

    另一个问题可能是您的 IEnumerable&lt;AssetTrackingSystem.Model.SampleDetailsSummary&gt; 的大小太大,刚好超过允许的最大长度。

    使用 Kendo 避免这种情况的最佳方法是创建视图模型并将您的网格绑定到那些而不是实际的数据库实体。

    如果SampleDetailsSummary 仅具有您在网格中显示的字段,并且您无法通过消除额外属性使其更小,那么您应该考虑使用实际的 ajax 功能并在分页服务器端进行操作。

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2015-01-11
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2023-03-30
      相关资源
      最近更新 更多