2013-08-14 10 views
14

Próbuję serializować listę do łańcucha json za pomocą Json.NET, ale zwracany łańcuch ma odwrócony ukośnik, który z kolei nie przetwarza json parsowania.Json.NET dodając ukośnik odwrotny, zwracając json serializowany ciąg

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

Powyższy kod zwraca

"[{\"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\"}]" 

który zawiedzie wszystko JSON parsowania. Jak mogę je usunąć.

+2

To dziwne, te ukośniki odwzorowują mnie jak zwykłe, uciekające postacie. Należy pamiętać, że jeśli sprawdzimy wartość zwracaną przez tę funkcję w debugerze, znaki ewakuacyjne pozostaną na miejscu, podczas gdy faktyczna wartość łańcucha nie będzie ich zawierała. –

+1

Ale podczas konsumowania Json od strony klienta, backslash spowodowałby wszelkiego rodzaju problemy. –

+1

Ale kiedy idę do punktu końcowego usługi z Google Chrome, to właśnie do mnie zwracam. A także jako ciąg, jeśli weźmiesz pod uwagę łańcuchy zawierające JSON. –

Odpowiedz

17

Nie to nie

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

Nie może być dwa problemy:

A) szukasz w wyniku z debugera. Aby to sprawdzić, umieść JsonConvert w zmiennej tymczasowej (tak jak ja) i spójrz na nią za pomocą debuggera. Kliknij strzałkę na prawo od klepsydry i wybierz Text Visualizer.

lub

b) Metoda wywołujący jest przekształcenie obiektu ponownie do formatu JSON, więc ucieka wszystko.

+1

Użyłem "Text Visualizer" pokazuje go poprawnie, ale myślę, że Google Chrome jest formatowanie json i wprowadzenie znaków ucieczki. Ale w IE proszono mnie o zapisanie pliku json jako pliku i po jego otwarciu nadal widzę cytaty. –

+2

@SohamDasgupta Jak już powiedziałem, być może jedną z metod wywoływania w górę łańcucha jest ponowne jsonowanie. – xanatos

+0

@xanatos Zgadzam się na "ponowne jsonowanie" tego. Zwróciłem po prostu 'x.ToList()' w projekcie WebAPI, metoda 'json' sama otrzymała wynik. Dzięki za odpowiedź – Sincere

3
string str = "Your string with slashes"; 

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

Obiekt JSON jest serializowany dwa razy.

I rozwiązane przez:

Deklarowanie umowę pracy formatu odpowiedzi metoda powrotu JSON. Zmieniłem metodę, aby zwrócić obiekt zamiast łańcucha.

Serializacja Jasona zostanie przeprowadzona automatycznie za kulisami.