Json.NET adicionando backslash ao retornar json serializado string

Eu estou tentando serializar uma lista para json string usando Json.NET mas a seqüência de caracteres de retorno tem backslash dentro dele, que por sua vez está falhando uma análise json.

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

O código acima retorna

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

que falha toda a análise JSON. Como posso removê-los

Não, não

 class Program { class Book { public int ID; public string BookName; } static void Main() { var books = new List { 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); } } 

Pode haver dois problemas:

A) Você está olhando para o resultado do depurador. Para verificar isso, coloque o JsonConvert em uma variável temporária (como eu fiz) e examine-o com o depurador. Clique na seta à direita da ampulheta e selecione Text Visualizer .

ou

B) O método de chamada está transformando o object novamente em Json, escapando de tudo.

 string str = "Your string with slashes"; str = JToken.Parse({your string here}).ToString(); 

O object JSON é serializado duas vezes.

Resolvi por:

Declarando o contrato de operação do formato de resposta do método para retornar JSON. Eu mudei o método para retornar um object em vez de uma string.

A serialização de Jason será feita automaticamente nos bastidores.