如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?
Posted
技术标签:
【中文标题】如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?【英文标题】:How to serialize JSON to string without escape characters in .NET Core? 【发布时间】:2018-07-18 21:15:24 【问题描述】:我想在 .NET Core 的字符串中将 C# 对象序列化为 JSON。
我已尝试使用此代码,但它会生成一个带有转义字符的字符串:
string s = JsonConvert.SerializeObject(sensorData);
这是结果字符串:
"\"Id\":\"100201\",\"Timestamp\":\"2018-02-08T08:43:51.7189855Z\",\"Value\":12.3"
如果没有这样的转义字符,如何将对象序列化为字符串?
""Id":"100201","Timestamp":"2018-02-08T08:43:51.7189855Z","Value":12.3"
【问题讨论】:
它就像后者,但在调试器中你会看到转义 不,这不是我在调试器中看到的。该字符串确实包含转义字符。 您在哪里看到转义字符?即,如果您执行File.WriteAllText(path, s);
- 转义字符是否在文件中?您很有可能在 IDE 中看到了这一点,并且错误地认为这些字符确实存在。
相信我,反斜杠是真实的。
@OlavT 如果您展示一个实际展示它的可运行示例,我会相信您。我刚刚发布了一个可运行的示例,表明它们不存在。
【参考方案1】:
转义字符不存在。如果我们可以合理地假设您的 sensorData
类似于:
class SensorData
public int Id get; set;
public DateTime TimeStamp get; set;
public double Value get; set;
如果我这样做:
var sensorData = new SensorData
Id = 100201,
TimeStamp = DateTime.Now,
Value = 12.3,
;
string s = JsonConvert.SerializeObject(sensorData);
Console.WriteLine(s);
输出是:
"Id":100201,"TimeStamp":"2018-02-08T10:30:40.2290218+00:00","Value":12.3
转义字符是 IDE 功能,不是 JSON 的一部分。 IDE 向您显示字符串您需要将它们复制并粘贴到目标语言中;所以:如果该值是上面发布的 JSON,那么 IDE 会将其显示为 C# 文字:
"\"Id\":100201, ...snip... , \"Value\":12.3"
但是:那不是字符串的内容。
【讨论】:
添加到 Marcs 的答案中,如果您要使用类似return Ok(s)
的方式从 WebAPI 中的控制器返回序列化字符串,您还会在响应中看到带有反斜杠的转义字符串,而不是有效的 json。
答案是正确的。转义字符不存在。当我将字符串传递给事件网格时,添加了转义字符。 Visual Studio 在 IDE 中显示的内容相当混乱。【参考方案2】:
正如 Marc Gravell 所说,在调试时,使用 Json Viewer(观看开始或结束时的放大镜图标)并检查。
如果您真的将转义字符作为 Json 响应的一部分。在使用 Postman 或 Fiddler 测试 API 时说,即使是在 RAW 响应中,试试这个:
ASP .NET 核心具有数据格式化程序,输出受 Accepts 标头影响。如果 API 使用 Accepts: application/json 标头调用,尝试删除此标头。
希望这对某人有帮助。
【讨论】:
以上是关于如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asp.net core 3 中设置 json 序列化程序设置?
在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据
如何在 ASP.NET 中将 JSON 反序列化为简单的 Dictionary<string,string>?