2013-08-14 37 views
14

Tôi đang cố gắng sắp xếp một danh sách thành chuỗi json bằng cách sử dụng Json.NET nhưng chuỗi trả về có dấu gạch chéo ngược bên trong nó, do đó không phân tích cú pháp json.Json.NET thêm dấu gạch chéo ngược trong khi trả về chuỗi tuần tự json

var x = from d in entities.Books.ToList() 
     select new 
     { 
      ID = d.ID, 
      BookName = d.BookName 
     }; 
return JsonConvert.SerializeObject(x.ToList()); 

Đoạn mã trên trả về

"[{\"ID\":1,\"BookName\":\"MVC Music Store - Tutorial - v3.0\"},{\"ID\":2,\"BookName\":\"Pro.ASP.NET.MVC.3.Framework\"},{\"ID\":3,\"BookName\":\"Application Architecture Guide v2\"},{\"ID\":4,\"BookName\":\"Gang of Four Design Patterns\"},{\"ID\":5,\"BookName\":\"CS4 Pocket Reference\"}]" 

mà thất bại tất cả các phân tích cú pháp JSON. Làm thế nào tôi có thể loại bỏ chúng.

+2

thật kỳ quặc, những dấu gạch chéo ngược đó trông giống như các ký tự thoát bình thường đối với tôi. Hãy nhớ rằng nếu bạn kiểm tra giá trị trả lại của hàm này trong trình gỡ lỗi, nó sẽ để lại các ký tự thoát đó tại chỗ, trong khi giá trị thực của chuỗi không có chúng. –

+1

Nhưng trong khi tiêu thụ Json từ phía máy khách, dấu gạch chéo ngược sẽ gây ra tất cả các loại vấn đề. –

+1

Nhưng khi tôi đi đến điểm cuối dịch vụ từ Google chrome, đây là những gì đang được trả lại cho tôi. Và cũng như chuỗi nếu bạn xem xét các chuỗi kèm theo JSON. –

Trả lời

17

số nó không

class Program 
{ 
    class Book 
    { 
     public int ID; 
     public string BookName; 
    } 

    static void Main() 
    { 
     var books = new List<Book> { new Book { ID = 1, BookName = "A" }, new Book { ID = 2, BookName = "B" } }; 

     var x = from d in books 
     select new 
     { 
      ID = d.ID, 
      BookName = d.BookName 
     }; 

     string str = JsonConvert.SerializeObject(x.ToList()); 
     Console.WriteLine(str); 
    } 
} 

Có thể có hai vấn đề:

A) Bạn đang tìm kiếm tại các kết quả từ các chương trình gỡ rối. Để kiểm tra điều này, hãy đặt JsonConvert trong một biến tạm thời (như tôi đã làm) và xem nó bằng trình gỡ lỗi. Nhấp vào mũi tên bên phải của đồng hồ cát và chọn Text Visualizer.

hoặc

B) Phương pháp gọi điện thoại đang thay đổi các đối tượng lại để Json, vì vậy thoát tất cả mọi thứ.

+1

Tôi đã sử dụng 'Trình hiển thị văn bản' hiển thị chính xác nhưng tôi đoán google chrome định dạng json và đặt ký tự thoát. Nhưng trong IE, tôi được yêu cầu lưu json như một tập tin và sau khi mở nó, tôi vẫn thấy các dấu ngoặc kép. –

+2

@SohamDasgupta Như tôi đã nói, có lẽ một trong những phương pháp gọi là up-the-chain đang tái nhập vào nó. – xanatos

+0

@xanatos Tôi đồng ý về việc "tái nhập dữ liệu". Tôi chỉ đơn giản trả về 'x.ToList()' trong một dự án WebAPI, phương thức 'json' tự kết quả. Cảm ơn câu trả lời của bạn – Sincere

3
string str = "Your string with slashes"; 

str = JToken.Parse({your string here}).ToString(); 
0

Đối tượng JSON được tuần tự hai lần.

Tôi đã giải quyết bằng cách:

Khai báo hợp đồng hoạt động của định dạng phản hồi phương thức trả về JSON. Tôi đã thay đổi phương thức để trả về một đối tượng thay vì một chuỗi.

Việc tuần tự hóa Jason sẽ được thực hiện tự động sau hậu trường.

Các vấn đề liên quan