Newtonsoft.Json SerializeObject没有转义反斜杠

鉴于代码:

dynamic foo = new ExpandoObject(); foo.Bar = "something"; string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo); 

输出如下:

 "{\"Bar\":\"something\"}" 

调试大型json文档时很难阅读 – 使用Newtonsoft.Json的内置function(不是正则表达式或可能破坏事物的黑客攻击)有没有办法使输出成为一个带有valie的字符串:

 {Bar: "something"} 

在查看json值时在调试器中看到的是您应该在C#文件中使用以获取相同值的字符串值。

确实你可以替换

 dynamic foo = new ExpandoObject(); foo.Bar = "something"; string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo); 

 string json = "{\"Bar\":\"something\"}"; 

不改变程序的行为。

因此,要获得不同的值,您应该更改JsonConvert的工作方式,但JsonConvert符合JSON标准 ,因此忘记它!

如果你实际上并没有序列化ExpandoObject (也没有任何其他密封类在你的控件之外),你可以使用你在json中序列化的类型的DebuggerDisplayAttribute来定义在调试期间如何显示对象(在你的代码中, foo实例)。

但字符串是一个字符串,VisualStudio是正确的:双引号必须转义。

如果在从WebApi方法返回值时发生这种情况,请尝试返回对象本身,而不是序列化对象并返回json字符串。 默认情况下,WebApi会将对象序列化为响应中的json; 如果你返回一个字符串,它将转义它找到的任何双引号。

所以代替:

 public string Get() { ExpandoObject foo = new ExpandoObject(); foo.Bar = "something"; string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo); return json; } 

尝试:

 public ExpandoObject Get() { ExpandoObject foo = new ExpandoObject(); foo.Bar = "something"; return foo; } 

老问题,但我发现了这个,

在我的情况下,我在调试器中查看JSON字符串,我发现正在添加转义。

当我将JSON打印到控制台时,它没有转义字符。 希望能帮助到你。

您应该使用JavaScriptSerializer.Serialize方法,而不是使用Newstonsoft.Json。

 dynamic foo = new ExpandoObject(); foo.Bar = "something"; var js = new JavaScriptSerializer( ); string json = js.Serialize(foo); 

此方法可准确生成您要查找的输出。 我在这里读到了它。

嘿我只是简单地写出一个文件

  using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"jsonGonna.txt", true)) { file.WriteLine(json); } 

现在只需运行该程序就可以获得没有黑色斜杠的function,这对于需要多次保存JSON的大型程序非常有用

它只是简单地返回IHttpActionResult并返回对象

  public IHttpActionResult Get() { ExpandoObject foo = new ExpandoObject(); foo = //query result return ok(foo) }