2011-01-07 2 views
0

Я создаю строку JSON, используя отличную JSON libary Джеймса Ньютона-король создать строку 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\":\"[email protected]\",\"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); 

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

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

ответ

1

Таким образом, у нас есть небольшая побега/кодировка. Ваша строка:

"{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"[email protected]\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}" 

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

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

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

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

Это подействовало - большое спасибо – DEH

Смежные вопросы