Javascript C#-无法为JSON转义撇号

Javascript C#-无法为JSON转义撇号,javascript,c#,asp.net,Javascript,C#,Asp.net,我遇到了这样一种情况:一些对象正在使用JSON.NET序列化为JSON,然后注册为客户机脚本块。对象的JSON以单引号文本形式放入javascript中,如下所示: // javascript output, normal reportParameters = '{ "Location" : "My house" }'; var tempThing = { "Location" : "Billy's House" }; reportParameters = JSON.stringify(tem

我遇到了这样一种情况:一些对象正在使用JSON.NET序列化为JSON,然后注册为客户机脚本块。对象的JSON以单引号文本形式放入javascript中,如下所示:

// javascript output, normal
reportParameters = '{ "Location" : "My house" }';
var tempThing = { "Location" : "Billy's House" };
reportParameters = JSON.stringify(tempThing);
StartDoingThings();
但有时它需要输入包含撇号的值,比如“Billy's House”,所以显然我需要避开这个问题,否则javascript就会崩溃

// javascript output scenario, bad
reportParameters = '{ "Location" : "Billy's House" }';

// what I need is this
reportParameters = '{ "Location" : "Billy\'s House" }';
我试着这样做:

// C# input
reportParameterText = reportParameterText.Replace("'", @"\'");`
然而,这总是把它改成“比利的房子”,我不知道为什么。很多地方都有类似的问题,比如“这只是调试器表示一个反斜杠的方式”,但在我的例子中,javascript中仍然有两个反斜杠,所以反斜杠被转义,而不是撇号,一切都中断了

// javascript actual output, bad
reportParameters = '{ "Location" : "Billy\\'s House" }';
我已经通过调试器对其进行了跟踪,并且在序列化前后都有两个反斜杠,因此序列化程序不是问题所在。正如我之前所说的,它肯定不仅仅是调试器对转义字符的表示,因为这些值正在使它成为源代码

我尝试过的其他解决方案,都是C#:

问题:为什么我总是受到两次反斜杠,如何确保我只记下一次

这是.NET4

解决方案

谢谢大家的帮助和信息。我已经解决了我的问题,把几个人的建议结合起来,基本上按照@Ali123的建议去做。至于C#问题“第二个反斜杠从哪里来”,它与下面@Gusman的答案有关

我在C#中的序列化字符串不如Javascript中的字符串安全,但它仍然是格式良好的JSON。任何东西的JS黑盒都接受留在
reportParameters
变量中的JSON对象字符串,但这并不意味着我必须在C#中获取字符串化的JSON

因此,我准备生成的JS代码如下所示,而不是C#中的String.Replace:

// javascript output, normal
reportParameters = '{ "Location" : "My house" }';
var tempThing = { "Location" : "Billy's House" };
reportParameters = JSON.stringify(tempThing);
StartDoingThings();
再看一遍,我可以从中划出一条线,但它仍然有效

TL;DR谢谢,我知道这是一个稍微令人困惑的问题。

在将数据发送到服务器之前使用JSON.stringify() //要发送的数据

var-DTS={“name”:“某人的姓名”,“phone”:“123456”};
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
url:“ItemsAndCart.aspx/AddCustomer”,
数据:JSON.stringify(DTS),
数据类型:“json”,
成功:功能(结果){
警报(结果d);
控制台日志(结果);
},
错误:函数(xmlhttprequest、textstatus、errorshown){
警报(“连接到服务器失败”);
log(“错误:+errorshown”);
}

});您正在混合语义。C#和带双引号的javascript使用反斜杠作为转义字符,如C、带单引号的javascript或带前缀@的C#都是文字

设置时:

reportParameters = '{ "Location" : "Billy\'s House" }';
您使用的是文字,因此反斜杠包含在字符串中。当您在C#中看到字符串时,您会看到它被转义,因为反斜杠是转义字符,它是用另一个反斜杠字符转义的,但这并不意味着有两个反斜杠,只有一个,但C#中的调试器会以转义形式显示它

如果要在javascript中正确组合字符串,请使用以下命令:

reportParameters = "{ \"Location\" : \"Billy's House\" }";

您使用的json序列化程序不能处理撇号?试试Json.NET,我很确定它做得对。@SamAxe它是Json.NET。请看这个问题:我认为你的问题不在于序列化。JSON
{“Location”:“Billy's House”}
不需要转义,它完全有效。这里的问题是“对象的JSON以单引号文本形式放入javascript”,您使用的代码是什么。我还想问,您是否需要在javascript端使用字符串。你拿绳子干什么?如果您只是将其反序列化为一个对象,那么您可以跳过整个步骤,只输出:
reportParameters={“Location”:“myhouse”}是的,如果我不能让更简单的替换工作,这是我下一步要尝试的事情。我会尝试一下,使用JSON.stringify确实解决了我的问题,我的问题被我的C#问题所阻碍,非常感谢!我希望我能标记不止一件事作为答案。我认为你为你的问题选择了正确的答案。但我的回答对你的情况来说是正确的。两者都很好。祝你好运,编码愉快。这:
“我的转义字符串”
是一个完全合法的javascript字符串。您所说的文字是什么意思?您的意思是(这是ES6的一个特性)?这非常有启发性,并解释了奇怪的字符串问题。