Строка JSON, содержащая \ "не анализируется - PullRequest
0 голосов
/ 07 января 2011

Я создаю строку JSON с использованием превосходной библиотеки JSON Джеймса Ньютона-Кинга.Я создаю строку JSON, используя следующую строку кода:

string userJSON = Newtonsoft.Json.JsonConvert.SerializeObject(existingAdminUser, Newtonsoft.Json.Formatting.None);

Результат выглядит следующим образом:

"{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"charles17@test76876.com\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}"

Затем я помещаю эту строку в мой http-ответ, используя следующую строкукода:

HttpContext.Current.Response.Write("<input type=\"hidden\" name=\"adminextrainfo\" id=\"adminextrainfo\" value=\"" + userJSON + "\" />");

Затем я пытаюсь получить доступ / проанализировать JSON на клиенте, используя:

var userdetails = $.parseJSON(valueOfHiddenField);

Попытка синтаксического анализа завершается неудачно, и если я пытаюсь просмотреть содержимоеполе (с помощью предупреждения), то я вижу только самый первый {символ.Кажется, что последовательность символов \ "трактуется js как новая строка. Как я могу кодировать значение скрытого поля на сервере, или как я могу иметь дело со значением скрытого поля на клиенте, чтобы он" обрабатывал "\"последовательность символов?

Большое спасибо.

1 Ответ

1 голос
/ 07 января 2011

Итак, у нас есть небольшой беспорядок в коде выхода / кодирования. Ваша строка:

"{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"charles17@test76876.com\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}"

неверно, если оно не показано в некотором контексте C # (например, отладчик Visual Studio). Все эти косые черты нужны, только если вы поместите это в исходный код C #. Если вы назначите его переменной, переменная будет хранить ее без слешей, поскольку они предназначены для экранирования только внутри кода C #. Они не могут быть причиной вашей проблемы, потому что они существуют только в отладчике Visual Studio, а не в вашем приложении.

Однако вы не можете просто вставить JSON в HTML. Он содержит несколько символов (например, двойная кавычка на второй позиции), которые необходимо экранировать, поскольку они имеют особое значение в HTML.

Итак, ваше исправление должно быть:

HttpContext.Current.Response.Write("<input type=\"hidden\" name=\"adminextrainfo\" id=\"adminextrainfo\" value=\"" + Server.HtmlEncode(userJSON) + "\" />");
...