【问题标题】:JsonConvert.Serialize keeping extra backslashes?JsonConvert.Serialize 保留额外的反斜杠?
【发布时间】:2014-11-19 06:33:34
【问题描述】:

(使用 Newtonsoft.Json 6.0.6)

鉴于此代码:

var folderNames = new List<string> { @"C:\Hello", @"C:\World" };
string json = JsonConvert.SerializeObject(folderNames);
Console.WriteLine(json);

这是序列化的 json 的样子(注意有 4 个反斜杠):

"[\"C:\\\\Hello",\"C:\\\\World\"]"

我得到这个控制台输出(例如未转义的 json):

["C:\\Hello","C:\\World"]        

我不希望 extra 转义反斜杠出现在控制台输出中。
有什么建议?

.NET Fiddle 上也有代码:https://dotnetfiddle.net/yHJvfu

【问题讨论】:

  • json.Replace("\\","")?
  • @CSharper, json.Replace(@"\\", @"\") 会起作用。如果你写这个作为答案,我可以给你信用。
  • @CSharper,谢谢,但我昨天已经读过那篇文章,但我不明白这对我有什么帮助。看看我帖子末尾的 .NET Fiddle 链接,看看会发生什么。您对替换的建议是我能想到的唯一可以恢复转义行为的方法。在我看来,JsonSerializer 应该已经知道反斜杠是 C# 中的转义字符,因此无需再次这样做。
  • 根据 JSON 规范没有“额外的”反斜杠。为了使 JSON 有效,必须转义反斜杠。 (请参阅JSON.org。)您在小提琴中获得的输出正是我期望看到的。您是说要创建无效的 JSON 用于显示目的吗?

标签: c# .net json.net .net-4.5


【解决方案1】:

Javascript 以与 c# 相同的方式转义斜线。 \ 是 javascript 中的转义字符。 JSON 有效

【讨论】:

  • 是的,我知道。那么我该怎么做才能让 Console.WriteLine 输出我所期望的呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多