.NET 7 Web API如何返回无缩进的原始JSON响应?
解决.NET 7 Web API返回带缩进JSON的问题
在.NET 7 Web API应用中,所有返回JSON的端点始终输出带缩进的响应,导致响应字节数增加。当前返回示例:
[ { "Id": "1", "Alias": "Superman", "FirstName": "Clark", "LastName": "Kent" }, { "Id": "2", "Alias": "Batman", "FirstName": "Bruce", "LastName": "Wayne" }]
需要的紧凑无缩进格式:
[{"Id":"1","Alias":"Superman","FirstName":"Clark","LastName":"Kent"},{"Id":"2","Alias":"Batman","FirstName":"Bruce","LastName":"Wayne"}]
已尝试的方案均未生效:
- 在Program.cs中配置Newtonsoft.Json的
Formatting.None - 使用
Result.ToString(Formatting.None)转换为字符串 - 将结果转为JObject/JArray并指定无缩进序列化
所有结果均通过return Content(result.ToString(), "application/json", Encoding.UTF8);返回客户端。
核心原因
问题出在result.ToString()的调用上:无论全局序列化配置如何,JObject/JArray的ToString()方法默认会输出带缩进的格式,手动将其转为字符串后通过Content返回,会绕过框架的全局序列化配置。
解决方案
方案1:使用框架内置ActionResult返回(推荐)
放弃手动转字符串,直接返回对象,让框架按照全局配置自动处理序列化:
// 替代Content方法,直接返回对象 return Ok(result);
对应不同的响应状态码,可使用NotFound()、Created()等ActionResult方法。此时全局配置的序列化规则会生效,输出紧凑的无缩进JSON。
方案2:手动序列化时强制指定无缩进
如果必须使用Content返回字符串,需手动用序列化方法明确指定无缩进格式,而非依赖ToString():
使用Newtonsoft.Json:
var compactJson = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.None); return Content(compactJson, "application/json", Encoding.UTF8);
使用.NET默认的System.Text.Json:
var compactJson = System.Text.Json.JsonSerializer.Serialize(result, new System.Text.Json.JsonSerializerOptions { WriteIndented = false }); return Content(compactJson, "application/json", Encoding.UTF8);
方案3:确保全局序列化配置正确
如果使用方案1,需确认Program.cs中的序列化配置正确:
配置Newtonsoft.Json:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None; });
配置System.Text.Json(.NET 7默认):
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = false; });
内容的提问来源于stack exchange,提问作者AbsolutG
相关产品推荐
相关产品推荐

