2012-05-16 71 views
11

说我有一个像编码撇号与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,其中的撇号正确吗?

+0

jQuery的哪个版本您使用的? – nemesv

+0

@nemesv版本1.7.1 – user1399487

+1

你能解决与JSON.NET的问题? – CoffeeCode

回答

1

以下答案表明两者应该相当。 https://stackoverflow.com/a/5022386/1388165

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

+0

因为jsonstring包含双引号和单引号,所以在parseJson中使用它们中的任何一个当前都会导致失败,因为它会提前转义jsonString。 – user1399487

1

你试过用撇号撇号吗?

喜欢的东西Testing = "check \' out";


你也应该看看this后,似乎有一些有趣的答案,你在这里。

1

试试这个:

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

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