ASP.NET Web API返回JSON时如何保留单个反斜杠?
解决ASP.NET Web API JSON响应中保留单个反斜杠的问题
问题根源
你当前代码里的\'是C#的单引号转义符,并非反斜杠字符——这就是响应里看不到反斜杠的核心原因。要在JSON里输出单个反斜杠,得先在C#字符串中正确表示反斜杠,再配合序列化器配置确保不被额外转义。
正确写法与配置方案
1. 修正C#字符串赋值
要在C#字符串中表示一个实际的反斜杠字符,有两种写法:
- 用双反斜杠转义:
Scenario = "{The following special characters are not supported.[ '/', '#', '?', ',', '\\']}"; - 用逐字字符串(@前缀),直接写单个反斜杠即可:
Scenario = @"{The following special characters are not supported.[ '/', '#', '?', ',', '\']}";
2. 适配ASP.NET Web API序列化器配置
针对Newtonsoft.Json(传统ASP.NET Web API默认)
默认情况下,Newtonsoft.Json会把C#中的单个反斜杠序列化为JSON里的单个反斜杠,但如果项目有特殊配置导致额外转义,可在WebApiConfig.cs中修改配置:
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.Default };
StringEscapeHandling.Default会按JSON规范处理转义,不会额外转义反斜杠。
针对System.Text.Json(ASP.NET Core默认)
默认配置下该序列化器会正确处理反斜杠,若出现异常转义,可在Program.cs中调整:
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.EscapeHandling = JsonEscapeHandling.Default; });
避免开启过度转义的选项。
3. 验证序列化结果
你可以手动序列化测试,确认字符串是否正确:
var scenario = "{The following special characters are not supported.[ '/', '#', '?', ',', '\\']}"; var json = JsonConvert.SerializeObject(scenario); // 输出应为:"{The following special characters are not supported.[ '/', '#', '?', ',', '\']}"
为什么之前的尝试无效?
- 用
JsonConvert.SerializeObject无效,是因为原始字符串里根本没有反斜杠(\'是转义单引号,不是反斜杠字符); Regex.Unescape用于处理正则转义,此处不需要,反而会破坏正确字符串;- 控制台程序中@字符串显示正常但ASP.NET中异常,大概率是序列化器配置差异导致,调整配置即可解决。
内容的提问来源于stack exchange,提问作者nitish jarmal
相关产品推荐
相关产品推荐

