包含\“未被解析的JSON字符串

时间:2011-01-07 11:11:05

标签: .net json parsing newline

我正在使用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视为换行符。如何在服务器上编码隐藏字段值,或者如何在客户端处理隐藏字段值以使其”处理“\ “字符序列?

非常感谢。

1 个答案:

答案 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) + "\" />");
相关问题