2013-08-14 9 views
14

Ich versuche, eine Liste zu JSON-Zeichenfolge mit Json.NET zu serialisieren, aber die Rückführungszeichenfolge hat Backslash innerhalb, die ihrerseits ein JSON-Parsing fehlschlägt. Json.NET Hinzufügen Backslash beim Zurückgeben von Json serialisierte Zeichenfolge

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

Der obige Code gibt

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

die alle JSON-Parsing fehlschlägt. Wie kann ich diese entfernen?

+2

das ist seltsam, diese Backslashes sehen für mich einfach wie normale fliehende Charaktere aus. Beachten Sie, dass wenn Sie den Rückgabewert dieser Funktion im Debugger überprüfen, diese Escapezeichen an Ort und Stelle bleiben, während der tatsächliche Wert der Zeichenfolge sie nicht enthält. –

+1

Aber während der JSON von einer Client-Seite konsumiert würde der Backslash alle Arten von Problemen verursachen. –

+1

Aber wenn ich von Google Chrome zum Serviceendpunkt gehe, ist das, was mir zurückgegeben wird. Und auch als String, wenn Sie die Zeichenfolgen betrachten, die den JSON einschließen. –

Antwort

17

Nr es nicht

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

könnte es zwei Probleme:

A) Sie sind im Ergebnis aus dem Debugger suchen. Um dies zu überprüfen, setzen Sie die JsonConvert in eine temporäre Variable (wie ich) und betrachten Sie es mit dem Debugger. Klicken Sie auf den Pfeil rechts neben der Sanduhr und wählen Sie Text Visualizer.

oder

B) der aufrufenden Methode ist die Umwandlung der Objekt wieder zu JSON- so alles entweicht.

+1

Ich benutze 'Text Visualizer' zeigt es korrekt, aber ich glaube, google chrome formatiert den JSON und fügt Escape-Zeichen ein. Aber im IE werde ich gebeten, den JSON als Datei zu speichern, und nachdem ich ihn geöffnet habe, sehe ich immer noch die Anführungszeichen. –

+2

@SohamDasgupta Wie ich gesagt habe, ist es vielleicht eine der aufrufenden Methoden, die es auflisten. – xanatos

+0

@xanatos Ich stimme zu "re-json-in" es. Ich habe einfach 'x.ToList()' in einem WebAPI-Projekt zurückgegeben, die Methode 'json'ed das Ergebnis von selbst. Danke für deine Antwort – Sincere

3
string str = "Your string with slashes"; 

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

Das JSON-Objekt wird zweimal serialisiert.

I gelöst durch:

Deklarieren der Operation Vertrag des Verfahrens Antwortformat JSON zurückzukehren. Ich habe die Methode geändert, um ein Objekt anstelle einer Zeichenfolge zurückzugeben.

Die Serialisierung von Jason wird automatisch hinter den Kulissen durchgeführt.

Verwandte Themen