Экранированные символы JSON в jqGrid

Извините.. Я знаю, что меня обвинят в том, что я задаю вопрос, который уже задавался много раз, но я отчаянно искал, гуглил и пробовал всевозможные предложения, но ничего не помогло мне.

У меня есть служба, возвращающая некоторые данные JSON с апострофом. Таким образом, "Mike's example record" возвращается следующим образом:

{
    "Results": [
    {
        "ID": 139,
        "Name": "Mike\u0027s example record",
        "CedentName": "Mikes Business Partner"
    }],
    "Success": "1"
}

Что я хочу знать, так это то, как заставить jqGrid преобразовать этот код \u0027 обратно в апостроф.

введите здесь описание изображения

Я знаю, я знаю, это должна быть очевидная настройка, но я искал, гуглил, пробовал добавлять функции к атрибуту jqGrid datatype и так далее, но ничего не сработало.

Вот код, который я использую для загрузки данных JSON и заполнения jqGrid:

$("#tblCustomers").jqGrid({
                 url: '/JSON/GetCustomers.aspx',
                 contentType: "application/json; charset=utf-8",
                 datatype: "json",
                 viewrecords: true,
                 loadonce: true,
                 jsonReader: {
                    root: "Results",   //arry containing actual data 
                    id: "ID",          //index of the column with the PK in it 
                    repeatitems: false
                 },
                 . . .
                 . . .
                 autoencode: true,
                 caption: ""
             });

Еще вопрос: ради интереса добавил еще одну запись с речевыми метками.

Как ни странно, функция JavaScriptSerializer() выдала неверный JSON, а затем в jqGrid ничего не отобразилось!!

string JSON = new JavaScriptSerializer().Serialize(listOfRecords).ToString();

создал следующую недопустимую строку JSON.

Обратите внимание, что он не закодировал речевую метку в \u0022 :

{
    "Results": [
        {
            "ID": 140,
            "Name": "Mikes \\"Speechmark test\\" RP",
            "CedentName": "Mikes Cedent"
        },

Я не могу быть единственным, кто замечает эту причуду, можно...?

Немного позже...

Прочитав эту статью и увидев, как JavaScriptSerializer() форматирует даты, используя собственный неподдерживаемый формат Microsoft:

StartDate: "\/Date(1401573600000)\/",

..Я понял, что JavaScriptSerializer() довольно неприятный, и заменил его на JSON.Net.

Как ни странно, этот класс также с треском терпит неудачу, когда дело доходит до сериализации значений, содержащих речевые метки, и с радостью создает недопустимые строки JSON (у него такой же неправильный формат, как показано выше, с речевой меткой, оставленной в середине поля). стоимость).

Тем не менее, он, по крайней мере, оставляет апострофы в покое, поэтому я могу просматривать свои данные в jqGrid без необходимости форматирования.


person Mike Gledhill    schedule 06.06.2014    source источник


Ответы (1)


Вот самое близкое, что я нашел к ответу.

Вы можете применить средство форматирования к каждой ячейке в сетке, чтобы заставить ее анализировать значение JSON, которое преобразует escape-коды \u0027 обратно в апострофы.

function formatCell(cellValue, options, rowdata, action) {
    return JSON.parse("\"" + cellValue + "\"");
}

затем добавьте этот модуль форматирования в каждый столбец в jqGrid:

$("#tblCustomers").jqGrid({
                 url: '/JSON/GetCustomers.aspx',
                 contentType: "application/json; charset=utf-8",
                 datatype: "json",
                 colModel: [
                     { name: "ID", width: 70, align: "center", formatter: formatCell },
                     { name: "Name", search: true, width: 290, formatter: formatCell },
                     { name: "CedentName", search: true, width: 290, formatter: formatCell }
                 ],
                 . . .

Это работает, и я наконец-то вижу апостроф в своем jqGrid:

введите здесь описание изображения

Но должен же быть более чистый способ сделать это...?

person Mike Gledhill    schedule 06.06.2014