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 反序列化时忽略属性