2012-11-24 34 views
7

如何使用JSON.NET将'编码为\u0027如何在JSON.NET中对单引号/撇号进行编码

使JSON字符串会是这个样子:

{"Id":8,"CompanyName":"Jane\u0027s bakery"} 
+1

为什么你需要用这种方式编码撇号? “{”Id“:8,”CompanyName“:”Jane's bakery“}'是有效的JSON。 –

+0

JjQuery的parseJSON失败,因为撇号异常.. – CoffeeCode

+0

我明白了。您的前端代码如何获得JSON? –

回答

6

Json.NET 4.5发行11增加了一个选项来控制串逃逸。其中一个选项是转义所有包含单引号的HTML字符。

JsonWriter.StringEscapeHandling

13

样品呼叫

Newtonsoft.Json.JsonConvert.SerializeObject(your_object, 
    Newtonsoft.Json.Formatting.None, 
    new Newtonsoft.Json.JsonSerializerSettings 
    { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml }) 
+0

是否可以使用单引号进行编码?像这样'{'Id':8,'CompanyName':'Jane \ u0027s bakery'}'? – Serge

2

我以为我有同样的要求,但@ nick_w的评论使我意识到,我并不需要在所有的逃避单引号。

如果你生成json作为服务器端代码中的字符串,然后输出到客户端的JavaScript,所以它可以转换为JavaScript对象,然后转义是不需要的。

使用需要逃逸单引号额外的步骤

(采用asp风格语法中的代码)...

var myData = JSON.parse('<%=myServerGeneratedStringWithSingleQuotesEscaped %>'); 

使用JSON,因为它是...

var myData = <%=myServerGeneratedString %>; 

的Javascript将解释不引号的字符串,如

[{“name”:“Bill”},{“name”:“Ted”}]

as javascript objects。

因为在处理服务器端和客户端字符串时很容易混淆,所以此提醒可能对某人有用。它可能会或可能不适用于OP - 我确信有很多情况下单引号真正需要转义。

+0

感谢您的提示。但是,如果'myServerGeneratedString'为空,并且您放弃了单配额,则会出现无法处理的JavaScript语法错误。如果保留单配额并且'myServerGeneratedString'为空,则不会有比可以检查的空字符串更多的损害。这就是为什么我保持他们,即使它不知何故是丑陋的。 –