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 \u0027out"}を返します。次のようなJavaScriptオブジェクトを作成したい

var model = $.parseJSON('@jsonString');

ただし、これはアポストロフィがエンコードされている場合にのみ機能します。それ以外の場合、アポストロフィは私のjavacriptを次のように見せます

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

parseJSON挿入されたアポストロフィにより、文字列のエスケープが早すぎるため、失敗します。

JavascriptSerializerは、デフォルトでアポストロフィを\ u0027としてエンコードしますが、JSON.NET(使用したい)はエンコードしません。これを行うためにJSON.NETを変更するにはどうすればよいですか?足りない設定はありますか?JSON文字列をアポストロフィでOKなJavaScriptに解析する別の方法はありますか?

4

3 に答える 3

1

次の答えは、2つが同等でなければならないことを示しています。 https://stackoverflow.com/a/5022386/1388165

parseJSON呼び出しが失敗した場合は、引数に一重引用符ではなく二重引用符を使用すると役立つ可能性があります。

于 2012-05-16T19:50:41.360 に答える
1

これを試して:

{"Testing":"check \u0027 out"}
于 2013-09-10T10:02:02.137 に答える