如何在ASP.NET Core Web API中配置JSON格式的缩进

38

我该如何配置 ASP.NET Core Web Api 控制器,以便仅在 Development 环境下返回格式良好的 JSON?

默认情况下,它会返回类似以下内容:

{"id":1,"code":"4315"}

我希望响应中有缩进,以便易读:

{
    "id": 1,
    "code": "4315"
}

通常浏览器中会有一个“美化”按钮,可以使JSON易读。Fiddler也有一个专门的JSON选项卡。 - Alex Sikilinda
6个回答

82

.NET Core 2.2及更低版本:

在您的Startup.cs文件中,调用AddJsonOptions扩展:

services.AddMvc()
    .AddJsonOptions(options =>
    {
        options.SerializerSettings.Formatting = Formatting.Indented;
    });
请注意,此解决方案需要 Newtonsoft.Json
.NET Core 3.0及更高版本:
在您的Startup.cs文件中调用AddJsonOptions扩展方法:
services.AddMvc()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.WriteIndented = true;
    });

关于根据环境切换选项,这个答案应该会有所帮助。


2
请注意,SerializerSettings位于Microsoft.AspNetCore.Mvc中,但是为了使用Formatting,您需要添加using Newtonsoft.Json - Max
1
这就是我需要的 options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; - user1574598
在2.x版本中,我们通常会添加一个MediaTypeMapping来将Json格式映射为“application/json”(否则浏览器会忽略格式)。在3.0及更高版本中,我们该如何添加类似的映射呢? - BrainSlugs83

18

如果您想仅为单个控制器打开此选项而不是为所有JSON打开,您可以让您的控制器返回一个JsonResult并在构建JsonResult时传递Formatting.Indented,如下所示:

如果您想仅针对某个控制器启用此选项,而不是针对所有JSON启用,您可以让控制器返回一个JsonResult,并在构造JsonResult时传递Formatting.Indented参数,如下所示:

return new JsonResult(myResponseObject) { SerializerSettings = new JsonSerializerSettings() { Formatting = Formatting.Indented } };

10

在 .NetCore 3+ 中,您可以按照以下方式实现此操作:

services.AddMvc()
    .AddJsonOptions(options =>
    {               
         options.JsonSerializerOptions.WriteIndented = true;    
    });

1
这是目前最好的答案。我刚刚提交了一个建议的编辑,将其合并到DavidG已接受的答案中。 - Max

1
在我的项目中,我使用以下代码与Microsoft.AspNetCore.Mvc一起用于所有控制器。这适用于.NET Core 3。
public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers()
                .AddNewtonsoftJson(options =>
                {
                    options.SerializerSettings.Formatting = Formatting.Indented;
                });
    }

0

如果您只想为特定操作使用此选项,请使用 System.Text.Json

return new JsonResult(myResponseObject) { SerializerSettings = new JsonSerializerOptions() { WriteIndented = true } };

0
在.NET 7中,如果你想要返回带有缩进的JSON输出并且你正在使用控制器,你可以在你的启动代码中使用以下代码:
builder.Services.AddControllers()
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.WriteIndented = true;
            });

这是使用.NET内置的JSON功能,而不是使用任何外部框架,如Newtonsoft。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接