Json.NET在返回json序列化字符串时添加反斜杠

Soh*_*pta 16 .net c# json .net-4.0 json.net

我试图使用Json.NET将列表序列化为json字符串,但返回字符串中有反斜杠,这反过来又失败了json解析.

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

上面的代码返回

"[{\"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\"}]"
Run Code Online (Sandbox Code Playgroud)

它失败了所有JSON解析.我该如何删除它们.

xan*_*tos 19

不,它没有

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

可能有两个问题:

A)您正在查看调试器的结果.要检查这个,请JsonConvert输入一个临时变量(就像我一样)并使用调试器查看它.单击沙漏右侧的箭头并选择Text Visualizer.

要么

B)调用方法将对象再次转换为Json,从而逃避一切.

  • 我使用“Text Visualizer”正确显示了它,但我猜 google chrome 正在格式化 json 并放入转义字符。但在 IE 中,我被要求将 json 保存为文件,打开它后我仍然看到引号。 (2认同)
  • @SohamDasgupta正如我所说,或许其中一种调用方法是重新启动它. (2认同)

小智 5

string str = "Your string with slashes";

str = JToken.Parse({your string here}).ToString();
Run Code Online (Sandbox Code Playgroud)