Javascript 为什么我的序列化JSON在到达java脚本函数参数后会被取消序列化?

Javascript 为什么我的序列化JSON在到达java脚本函数参数后会被取消序列化?,javascript,asp.net,Javascript,Asp.net,我有一个java脚本函数,可在页面预呈现事件中执行: protected void Page_PreRender(object sender, EventArgs e) { var script = "<script>CreateProjectTree('" + serializedSearchCriteria + "');" + "</script>"; ClientScript.RegisterStartupScript(typeof (strin

我有一个java脚本函数,可在页面预呈现事件中执行:

protected void Page_PreRender(object sender, EventArgs e)
{
     var script = "<script>CreateProjectTree('" + serializedSearchCriteria + "');" + "</script>";
     ClientScript.RegisterStartupScript(typeof (string), "createProjectTree", script);
}
这是序列化后serializedSearchCriteria的值:

{"QueryString":null,"ProjectName":"\"24\"","SeasonName":"","MemberName":"","CompanyName":"","CompanyRole":0,"CompanyRoles":"","Year":""}
您可以看到,序列化它成功地转义了值
24
的双引号

这里的问题是,当我在调试模式下查看java脚本函数时,变量serializedSearchCriteria的值现在为:

{"QueryString":null,"ProjectName":""24"","SeasonName":"","MemberName":"","CompanyName":"","CompanyRole":0,"CompanyRoles":"","Year":""}"
现在请注意
24
。它再也逃不掉了。因此,一旦该对象位于java脚本函数中,它就不再是有效的JSON

为什么会这样


对象应该是序列化的。。。在某种程度上,它正在被取消序列化。有人知道为什么吗?

因为它被解析为JavaScript字符串文本,其中
\
是转义字符


如果要输出包含JSON文本的JavaScript字符串文字,则需要转义其中的任何特殊字符(即,用于分隔字符串的任何引号字符,以及
\
s)。

我认为它被视为字符串,请尝试:

var script = "<script>CreateProjectTree(JSON.parse('" + serializedSearchCriteria + "'));" + "</script>";
var script=“CreateProjectTree(JSON.parse(“+serializedSearchCriteria+”);“+”;

您会注意到添加了JSON.parse js函数。

当浏览器计算
脚本
元素时,它还会解析您的javascript,查看这些反斜杠并使用它们。你需要逃走

如果确实要将JSON字符串传递给
CreateProjectTree
函数,有时最简单的方法是将其重新序列化,而不是尝试将其作为序列化字符串插入脚本中:

var script = "<script>CreateProjectTree(JSON.stringify(" + serializedSearchCriteria + "));" + "</script>";
var script=“CreateProjectTree(JSON.stringify(“+serializedSearchCriteria+”);“+”;

json序列化json序列化,看看会发生什么。。。
var script = "<script>CreateProjectTree(JSON.stringify(" + serializedSearchCriteria + "));" + "</script>";