javascript - C# - 无法转义 JSON 的撇号

标签 javascript c# asp.net

我遇到过这样的情况:使用 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/

相关文章:

javascript - 如何将十字标记按钮完美地放置在窗口上

javascript - 找出模糊值与 "the focus one"相比是否不同(JavaScript + jQuery)

javascript - 单击按钮以指定的时间间隔更改颜色

中间的 C# 子字符串

c# - ASP.NET 的编码性能增强

c# - 无法更改 Asp 身份表名称..... Asp .Net Core 2?

javascript - Google Analytics 跟踪哪些页面嵌入了小部件

c# - 如何创建返回实现接口(interface)的类的类型的方法的通用接口(interface)?

c# - 类型参数约束似乎不适用于返回的类型

asp.net - 多线程环境下的文件访问策略(Web App)