2012-05-16 34 views
11

Nói rằng tôi có một lớp học nhưEncoding Apostrophe với JSON.NET

public class MyTestClass 
{ 
    public MyTestClass() 
    { 
     Testing = "check ' out"; 
    } 
    public string Testing { get; set; } 
} 

Và serializers JavascriptSerializer/JsonNet như:

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

Sau đó, trong một lần xem tôi có

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

Các JsonNet sẽ trả về {"Testing": "check 'out"}, trong khi JavascriptSerializer sẽ trả về {"Testing": "check \ u0027 out"}. Tôi muốn tạo đối tượng javascript như

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

Nhưng điều này chỉ hoạt động nếu dấu nháy đơn được mã hóa. Nếu không, các dấu nháy đơn làm javacript của tôi trông giống như

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

mà không thành công vì các dấu nháy đơn chèn làm parseJSON thoát khỏi chuỗi của tôi quá sớm.

JavascriptSerializer mã hóa dấu nháy đơn là \ u0027 theo mặc định trong khi JSON.NET (mà tôi muốn sử dụng) thì không. Làm thế nào tôi có thể thay đổi JSON.NET để làm điều này? Tôi có thiếu thiết lập nào không? Có một cách khác nhau tôi có thể phân tích cú pháp chuỗi JSON của tôi vào javascript, nơi dấu nháy đơn là OK?

+0

Phiên bản nào của jquery bạn đang sử dụng? – nemesv

+0

@nemesv Phiên bản 1.7.1 – user1399487

+1

bạn có thể giải quyết vấn đề với JSON.NET không? – CoffeeCode

Trả lời

1

Câu trả lời sau chỉ ra rằng cả hai phải tương đương nhau. https://stackoverflow.com/a/5022386/1388165

Nếu đó là cuộc gọi parseJSON bị lỗi, có thể dấu ngoặc kép thay vì dấu nháy đơn trong đối số sẽ giúp ích.

+0

Bởi vì jsonstring chứa cả hai dấu ngoặc kép và dấu nháy đơn, sử dụng một trong hai dấu ngoặc kép trong parseJson hiện đang gây ra lỗi vì nó thoát khỏi jsonString sớm. – user1399487

1

Bạn đã thử thoát dấu nháy đơn bằng dấu "\" chưa?

Something như Testing = "check \' out";


Bạn cũng nên có một cái nhìn tại this bưu điện, hình như vẫn có một số câu trả lời thú vị cho các bạn ở đây.

1

Hãy thử điều này:

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

Khi tôi dán văn bản vào vùng văn bản html từ Microsoft Word và sau đó sử dụng giá trị đó để tuần tự hóa nó trong C#, dấu nháy đơn không được sắp xếp theo \ u0027 nhưng thay vào đó nó vẫn là ký tự "'". Có suy nghĩ gì không? – nav