2013-08-14 10 views
14

Sto cercando di serializzare un elenco di stringa JSON utilizzando Json.NET ma la stringa di ritorno ha backslash all'interno di esso, che a sua volta sta fallendo un parsing di JSON.Json.NET aggiungendo backslash mentre tornava JSON stringa serializzata

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

Il codice di cui sopra restituisce

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

che non riesce tutti JSON parsing. Come posso rimuovere questi.

+2

che è strano, quei backslash basta guardare come normali caratteri fuggire in me. Ricordare che se si ispeziona il valore di ritorno di questa funzione nel debugger, questi caratteri di escape verranno lasciati sul posto, mentre il valore effettivo della stringa non li ha. –

+1

Ma consumando Json da un lato client, la barra rovesciata potrebbe causare tutti i tipi di problemi. –

+1

Ma quando vado all'endpoint del servizio da Google Chrome questo è ciò che mi viene restituito. E anche come stringa se si considerano le stringhe che racchiudono il JSON. –

risposta

17

No. esso non

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

Ci potrebbero essere due problemi:

A) State esaminando il risultato dal debugger. Per verificare questo, Metti il ​​JsonConvert in una variabile temporanea (come ho fatto io) e guardalo con il debugger. Fare clic sulla freccia a destra della clessidra e selezionare Text Visualizer.

o

B) Il metodo di chiamata sta trasformando l'oggetto nuovo a JSON, in modo da sfuggire tutto.

+1

Ho usato 'Visualizer testo 'lo mostra correttamente ma suppongo che google chrome stia formattando il json e inserendo caratteri di escape. Ma in IE mi viene chiesto di salvare il json come file e dopo averlo aperto vedo ancora le virgolette. –

+2

@SohamDasgupta Come ho già detto, forse uno dei metodi di chiamata up-the-chain è re-jsoning. – xanatos

+0

@xanatos Sono d'accordo sul "re-jsoning". Ho semplicemente restituito 'x.ToList()' in un progetto WebAPI, il metodo 'json'ed il risultato da solo. Grazie per la tua risposta – Sincere

3
string str = "Your string with slashes"; 

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

L'oggetto JSON è serializzato due volte.

ho risolto da:

Dichiarazione contratto funzionamento del formato metodo di risposta per restituire JSON. Ho cambiato il metodo per restituire un oggetto anziché una stringa.

La serializzazione di Jason verrà fatto automaticamente dietro le quinte.

Problemi correlati