繁体   English   中英

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

[英]Json.NET adding backslash while returning json serialized string

我正在尝试使用 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 解析失败。 我怎样才能删除这些。

不,它没有

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,因此逃避了一切。

string str = "Your string with slashes";

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

JSON 对象被序列化两次。

我解决了:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM