JqGrid, пытающийся послать большие данные от сервера до сетки, но getting:Error во время преобразования в последовательную форму или десериализации, используя JSON JavaScriptSerializer

У меня есть проблема, я получаю большой объем данных от сервера и тогда преобразовываю ее в формат Json, чтобы быть тогда рассмотренным в JqGrid. Это работает на небольшое количество данных, говорят, например, 200 рядов, но делая это для 10000 рядов это бросает следующую ошибку

Система. InvalidOperationException: Ошибка во время преобразования в последовательную форму или десериализации, используя JSON JavaScriptSerializer. Длина последовательности превышает набор значений на maxJsonLength собственности

Я попытался использовать последовательно-параллельньный преобразователь JavaScript и установил его в maxjsonLenght = int32. MaxValue, но все еще никакая удача

Следующее - мой код, пожалуйста, дайте мне предложения с примерами, как я могу зафиксировать это? Спасибо все!

GridConfig

 public JqGridConfig(String db, String jobGroup, String jobName, String detailTable,       String filterBatchControl, String filterDate, String filterTime, int page)
    {
        var entityhelper = new EntityHelper();
        var s = new JsonSerializer();

        try
        {
            //Populate Grid Model, Column Names, Grid Column Model, Grid Data
            entityhelper.PopulateDetailGridInit(db, jobGroup, jobName, detailTable, filterBatchControl, filterDate, filterTime);

            JqGridDetailAttributes = entityhelper.GridDetailAttributes;
            JqGridDetailColumnNames = entityhelper.GridDetailColumnNames;
            //JqGridDetailsColumnNamesForExport = entityhelper.GridDetailColumnNamesForExport;
            JqGridDetailColumnModel = entityhelper.GridDetailColumnModel;

            //Dynamic Data
            JqGridDynamicDetailData = entityhelper.GridDetailData;


            #region Column Model
            foreach (KeyValuePair kvp in entityhelper.GridDetailColumnModel)
            {
                s.Serialize(kvp.Key, kvp.Value.Attributes);
            }

            JqGridDetailColumnModelJson = s.Json();
            #endregion

            #region Concrete data.  1. List populated, 2. Convert to Json String, 3: Convert back to List
            JqGridDetailData = JsonSerializer.ConvertDynamicDetailsToJson(JqGridDynamicDetailData);//this is where the error occurs

            }
        catch (Exception ex)
        {
            //TODO: Logging
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }
    }

Последовательно-параллельньный преобразователь Json

  public static IList ConvertDynamicDetailsToJson(IList list)
    {
        if (list.Count == 0)
            return new List();

        var sb = new StringBuilder();
        var contents = new List();

        sb.Append("[");

        foreach (var item in list)
        {
            var d = item as IDictionary;

            sb.Append("{");
            foreach (KeyValuePair kvp in d)
            {    
                contents.Add(String.Format("{0}: {1}", "\"" + kvp.Key + "\"", JsonConvert.SerializeObject(kvp.Value))); 
            }
            sb.Append(String.Join(",", contents.ToArray()));
            sb.Append("},");
        }

        sb.Append("]");

        //remove trailing comma
        sb.Remove(sb.Length - 2, 1);
        var jarray = JsonConvert.DeserializeObject>(sb.ToString());

        return jarray;
    }

Диспетчер, которые возвращают результат Json сервера

  public JsonResult DetailGridData(TheParams param)
    {






        dynamic config= "";
        switch (param.JobGroup)
        {
            case "a":
                config = new BLL.abcBLL().GetDetailGridData("rid", "desc", 1, 20, null,
                                                                             param.FilterBatchControl,
                                                                             param.JobName, param.DetailTable,
                                                                             param.JobGroup, param.BatchDate,
                                                                             param.Source);
                break;
        }




        return Json(config, JsonRequestBehavior.AllowGet); //this reurns successfully json result
    }

Представление, где Jqgrid существует и не населяет сетку

 <script type="text/javascript">

var jobGroup = '@ViewBag.JobGroup';
var jobName  = '@ViewBag.JobName';
var detailTable = '@ViewBag.DetailTable';
var filterBatchControl = '@ViewBag.FilterBatchControl';
var controlDate = '@ViewBag.ControlDate';
var controlTime = '@ViewBag.ControlTime';
var source = '@ViewBag.DetailSource';
var page = '@ViewBag.page';



function loadDetailData() {
    var param = new Object();
    param.BatchDate = controlDate;
    param.BatchTime = controlTime;
    param.JobGroup = jobGroup;
    param.JobName = jobName;
    param.DetailTable = detailTable;
    param.FilterBatchControl = filterBatchControl;
    param.Source = source;
    param.page = page;

    window.parent.loadingDetailsHeader();        

    $.ajax({
        url: "/control/detailgriddata",
        dataType: 'json',
        type: 'POST',
        data: param,
        async: false,
        success: function (response) {
            try {
                jgGridDetailColumnNames = response.JqGridDetailColumnNames;
                //jqGridDetailColumnData = response.JqGridDetailData;
                jqGridDetailColumnData = response.config;
                $('#detailGrid').jqGrid('setGridParam', {colNames: jgGridDetailColumnNames});
                $('#detailGrid').jqGrid('setGridParam', {data: jqGridDetailColumnData}).trigger('reloadGrid');
                parent.loadingDetailsHeaderComplete();
            }
            catch(e) {
                window.parent.loadingDetailsHeaderException(e.Message);
            }
            return false;
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        }
    });
}

function exportdetails(date) {
    var param = new Object();
    param.db = source;
    param.jobGroup = jobGroup;
    param.jobName = jobName;
    param.detailTable = detailTable;
    param.filterBatchControl = filterBatchControl;          
    param.filterDate = date;
    param.filterTime = "NULL";

    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: '@Url.Action("ExportDetailsCsv", "Control")',
        dataType: 'json',
        data: $.toJSON(param),
        async: false,
        success: function (response) {
            window.location.assign(response.fileName);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("Details Export Exception: " + xhr.status);
        }
    });
}

//
 </script>
 <table id="detailGrid">
<tr>
    <td />
</tr>
</table>

 <div id="detailPager"></div>

 <div id="dialogGrid"></div>
0
nl ja de

1 ответы

Вероятно, необходимо ли рассмотреть, чтобы использовать оповещение серверной стороны вместо того, чтобы возвратить 10000 рядов клиенту? Оповещение серверной стороны данных SQL может быть осуществлено очень эффективнее как оповещение клиентской стороны (сортировка больших неиндексируемых данных в программе JavaScript).

Еще одним выбором, который вы имеете, является использование другой последовательно-параллельньный преобразователь JSON. Например, это может быть protobuf-чистый, ServiceStack. Текст (см. здесь также), Json. ЧИСТЫЙ и другой. В пути можно дополнительно улучшить исполнение заявления, соответствующего JavaScriptSerializer .

0
добавлено
@CharlesMighty: Извините, но код, который вы опубликовали шоу, что вы пытаетесь заполнить сетку абсолютно неправильным способом. Вы используете тип данных: ' json' вместе с данные: jqGridDetailColumnData и без использования URL выбор. Выбор данные работает только с тип данных: ' local' и альтернативное использование с тип данных: ' json' требуемое определение URL выбор. Я рекомендую, чтобы вы, чтобы использовать <закодировали> тип данных: ' json' и определяют как URL URL действия MVC, которые обеспечивают страницу данных. Посмотрите ответ для примера кода.
добавлено автор Oleg, источник
@CharlesMighty: пожалуйста!
добавлено автор Oleg, источник
Привет Олег, да, который был моим следующим шагом, должен сделать оповещение, я успешно возвращаю данные из сервера на страницах и затем возвращаю результат Json клиенту, однако, это не населяет в JqGrid. Я поместил код выше, любая помощь, которую можно предложить, будет действительно ценить его.Thank you very much.
добавлено автор CharlesMighty, источник
Спасибо Олег, поскольку всегда ваши ответы обеспечивают ясность, и помогает мне узнать больше. Большое спасибо действительно цените свою помощь.
добавлено автор CharlesMighty, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском