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

时间:2013-08-14 07:45:19

标签: c# .net 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());

上面的代码返回

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

无法解析所有JSON。我该如何删除它们。

4 个答案:

答案 0 :(得分:18)

没有。它没有

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

可能存在两个问题:

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

B)调用方法是将对象再次转换为Json,从而转义所有内容。

答案 1 :(得分:3)

string str = "Your string with slashes";

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

答案 2 :(得分:2)

JSON对象被序列化两次。

我解决了:

声明方法响应格式的操作契约以返回JSON。 我更改了方法以返回对象而不是字符串。

Jason的序列化将在幕后自动完成。

答案 3 :(得分:0)

我得到了相同的结果,但是当我对某些json序列化进行单元测试时,转义符加倍。查看我的代码,我意识到我正在序列化“期望的” json字符串,而不是实际的.net对象。因此,将json字符串传递给JsonConvert.SerializeObject(expectedJsonString)只会使它转义一次。这就是我来到这里的方式,这就是我写的答案,当我意识到我只是犯了一个编码错误...你才意识到你的错误吗?