使用JSON.NET对撇号进行编码

11

假设我有一个类如下所示:

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');

但是,这仅在撇号被编码时才有效。否则,撇号会导致我的JavaScript代码出现错误。

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

由于插入的撇号使得parseJSON过早地转义了我的字符串,因此它失败了。

JavascriptSerializer默认将撇号编码为\u0027,而JSON.NET(我想使用的)则没有这样做。我该如何更改JSON.NET才能实现这一点?我是否缺少设置?是否有其他方法可以将我的JSON字符串解析成JavaScript,其中包含的撇号是可以接受的?


你使用的是哪个版本的jQuery? - nemesv
1
你能解决JSON.NET的问题吗? - CoffeeCode
3个回答

1

试试这个:

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

当我从Microsoft Word粘贴文本到HTML文本区域中,然后使用该值在C#中进行序列化时,撇号不会被序列化为\u0027,而是保留为"'"字符。有什么想法吗? - nav

1

你尝试过用 "\" 转义单引号吗?

类似这样 Testing = "check \' out";


你还应该查看this文章,这里似乎有一些有趣的答案适合你。

1

由于jsonstring包含双引号和单引号,因此在parseJson中使用任何一个都会导致失败,因为它会提前转义jsonString。 - user1399487

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接