【发布时间】:2014-10-29 11:14:56
【问题描述】:
问题:我如何在服务器上使用 asp.net JavascriptSerializer 创建 JSON 字符串,这些字符串将始终与 IE 9 中的 jquery 1.9.1 parseJSON() 方法一起使用?
在服务器上,我在一个对象上调用 JavascriptSerializer.Serialize() 以将其转换为 JSON 字符串。该对象具有可以包含反斜杠的属性。所以 JavascriptSerializer 采用这样的值:
Has\Backslash
然后像这样转义它:
Has\\Backslash
当我通过 JsonLint 运行生成的 JSON 字符串时,它得到了验证:
{"HasBackslash":"Has\\Backslash"}
当我通过 JsonLint 运行它时,它会引发解析错误:
{"HasBackslash":"Has\Backslash"}
在 IE9/jquery 1.9.1 中,完全相反是可以接受的。 JavascriptSerializer 在服务器上创建的 Javascript 位在浏览器中失败,错误为“Invalid Character”:
var HasBackslash = $.parseJSON('{"HasBackslash":"Has\\Backslash"}');
但是这段 Javascript 工作得很好:
var HasBackslash = $.parseJSON('{"HasBackslash":"Has\Backslash"}');
这是完整的示例,我使用的是 jquery 1.9.1 和 IE 9。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>The Title</title>
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script type="text/javascript">
$(document).ready(function () {
try {
var NoBackslash = $.parseJSON('{"NoBackslash":"No Backslash"}');
$('#NoBackslash').text('NoBackslash parsed successfully');
}
catch(err){
$('#NoBackslash').text('Error parsing NoBackslash: ' + err.message);
}
try {
var HasBackslash = $.parseJSON('{"HasBackslash":"Has\Backslash"}');
$('#HasBackslash').text('HasBackslash parsed successfully');
}
catch (err) {
$('#HasBackslash').text('Error parsing HasBackslash: ' + err.message);
}
try {
var HasEscapedBackslash = $.parseJSON('{"HasEscapedBackslash":"Has\\Backslash"}');
$('#HasEscapedBackslash').text('HasEscapedBackslash parsed successfully');
}
catch(err){
$('#HasEscapedBackslash').text('Error parsing HasEscapedBackslash: ' + err.message);
}
});
</script>
</head>
<body>
<p id='NoBackslash'></p>
<p id='HasBackslash'></p>
<p id='HasEscapedBackslash'></p>
</body></html>
【问题讨论】:
标签: javascript jquery asp.net json