使用JSON.NET编码撇号

时间:2012-05-16 19:41:10

标签: jquery asp.net-mvc-3 razor json.net

说我有一个像

这样的课程
public class MyTestClass
{
    public MyTestClass()
    {
        Testing = "check ' out";
    }
    public string Testing { get; set; }
}

和JavascriptSerializer / JsonNet序列化器一样:

public IHtmlString ToJsonNet(object value)
{
    return new MvcHtmlString(JsonConvert.SerializeObject(value));
}

public IHtmlString ToJson(object value)
{
    var json = new JavaScriptSerializer();
    return new MvcHtmlString(json.Serialize(value));
}

然后在视图中我有

 @(Serializers.ToJsonNet(new MyTestClass()))
 @(Serializers.ToJson(new MyTestClass()))

JsonNet将返回{“Testing”:“check'out”},而JavascriptSerializer将返回{“Testing”:“check \ u0027 out”}。我想创建一个像

这样的javascript对象
var model = $.parseJSON('@jsonString');

但这仅在撇号被编码时才有效。否则,撇号使我的javacript看起来像

var model = $.parseJSON('{"Testing":"check ' out"}');

失败,因为插入的撇号让parseJSON过早地逃脱了我的字符串。

JavascriptSerializer默认将撇号编码为\ u0027,而JSON.NET(我想使用)却没有。如何更改JSON.NET来执行此操作?我缺少一个设置吗?有没有不同的方法我可以将我的JSON字符串解析为javascript,撇号是否正常?

3 个答案:

答案 0 :(得分:1)

以下答案表明两者应该是等价的。 https://stackoverflow.com/a/5022386/1388165

如果是parseJSON调用失败,那么参数中的双引号而不是单引号会有所帮助。

答案 1 :(得分:1)

你是否试过用" \"?

来逃避撇号

Testing = "check \' out";

这样的东西

您还应该看一下this帖子,这里似乎有一些有趣的答案。

答案 2 :(得分:1)

试试这个:

{"Testing":"check \u0027 out"}