我正在使用James Newton-King优秀的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);
解析尝试失败,如果我尝试查看字段的内容(使用警报),那么我只看到第一个{char。似乎“字符序列被js视为换行符。如何在服务器上编码隐藏字段值,或者如何在客户端处理隐藏字段值以使其”处理“\ “字符序列?
非常感谢。
答案 0 :(得分:1)
所以我们这里有一点逃避/编码混乱。你的字符串:
"{\"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) + "\" />");