web-dev-qa-db-fra.com

Json.NET ajoutant une barre oblique inverse lors du renvoi d'une chaîne sérialisée json

J'essaie de sérialiser une liste en chaîne JSON à l'aide de Json.NET, mais la chaîne de retour contient une barre oblique inverse, ce qui échoue à son tour lors de l'analyse json.

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

Le code ci-dessus renvoie 

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

qui échoue à toutes les analyses JSON. Comment puis-je supprimer ces.

16
Soham Dasgupta

Non, ce n'est pas

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

Il pourrait y avoir deux problèmes:

A) Vous regardez le résultat du débogueur. Pour vérifier cela, insérez la JsonConvert dans une variable temporaire (comme je l'ai fait) et examinez-la avec le débogueur. Cliquez sur la flèche à droite du sablier et sélectionnez Text Visualizer.

ou

B) La méthode d’appel est en train de transformer l’objet à nouveau en Json, évitant ainsi tout.

18
xanatos
string str = "Your string with slashes";

str = JToken.Parse({your string here}).ToString();
3
Damini Suthar

L'objet JSON est sérialisé deux fois.

J'ai résolu par:

Déclaration du contrat d'opération du format de réponse de la méthode pour renvoyer JSON . J'ai modifié la méthode pour renvoyer un objet au lieu d'une chaîne.

La sérialisation de Jason se fera automatiquement dans les coulisses.

1
Hassan Shouman