我遇到过这样的情况:使用 Json.NET 将某些对象序列化为 JSON,然后注册为客户端脚本 block 。对象的 JSON 以单引号文字的形式放入 javascript 中,如下所示:
// javascript output, normal
reportParameters = '{ "Location" : "My house" }';
但有时它需要放入包含撇号的值,例如“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 中出现了 2 个反斜杠,因此反斜杠而不是撇号和所有内容都被转义了休息。
// javascript actual output, bad
reportParameters = '{ "Location" : "Billy\\'s House" }';
我已经通过调试器跟踪了它,并且它在序列化之前和之后都有两个反斜杠,因此序列化程序不是问题。正如我之前所说,这绝对不仅仅是调试器对转义字符的表示,因为这些值正在将其写入源代码中。
我尝试过的其他解决方案,全部是 C#:
reportParameterText = reportParameterText.Replace("'", "\'"); // No change
reportParameterText = reportParameterText.Replace("'", "\\'"); // Creates 2 backslashes
reportParameterText = reportParameterText.Replace("'", @"[%]");
reportParameterText = reportParameterText.Replace(@"[%]", @"\'"); // Creates 2 backslashes
问题:为什么我总是得到 2 个反斜杠,如何确保只输入一个?
这是 .Net 4。
解决方案
感谢大家的帮助和信息。我通过结合几个人的建议并基本上按照@Ali123的建议解决了我的问题。至于“第二个反斜杠来自哪里”的 C# 问题,与下面 @Gusman 的回答有关。
我在 C# 中的序列化字符串不如 Javascript 中的字符串安全,但它仍然是格式良好的 JSON。 JS 黑匣子接受留在 reportParameters
变量中的 JSON 对象的字符串,但这并不意味着我必须在 C# 中获取字符串化的 JSON。
因此,我准备了生成的 JS 代码,如下所示:
var tempThing = { "Location" : "Billy's House" };
reportParameters = JSON.stringify(tempThing);
StartDoingThings();
再看一遍,我可以从中剪掉一条线,但它仍然有效。
TL;DR谢谢,我知道这是一个有点令人困惑的问题。
最佳答案
在将数据发送到服务器之前使用 JSON.stringify() //要发送的数据
var DTS = { "name": "someone's Name","phone": "123456" };
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "ItemsAndCart.aspx/AddCustomer",
data: JSON.stringify(DTS),
datatype: "json",
success: function (result) {
alert(result.d);
console.log(result);
},
error: function (xmlhttprequest, textstatus, errorthrown) {
alert(" conection to the server failed ");
console.log("error: " + errorthrown);
}
});
关于javascript - C# - 无法转义 JSON 的撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554710/