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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json.NET在返回json序列化字符串时添加反斜杠相关的知识,希望对你有一定的参考价值。

我试图使用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.NET在返回json序列化字符串时添加反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

Json.NET 反序列化或序列化 json 字符串并将属性映射到运行时定义的不同属性名称

使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性

JSON.net 反序列化返回一个空对象

.NET(C#)通过JSON.NET反序列化Elasticsearch返回响应的结果

有时是数组有时是对象时反序列化JSON

JSON.Net无法在自定义JsonConverter中反序列化json数组