【问题标题】:How can i configure JSON format indents in ASP.NET Core Web API如何在 ASP.NET Core Web API 中配置 JSON 格式的缩进
【发布时间】:2016-12-30 04:32:53
【问题描述】:

我如何配置 ASP.NET Core Web Api 控制器以仅为 Development 环境返回格式良好的 json?

默认情况下它返回类似:

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

为了便于阅读,我想在响应中缩进:

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

【问题讨论】:

  • 浏览器中通常有一个“美化”按钮,可以使 JSON 可读。 Fiddler 也有一个特殊的 JSON 选项卡。

标签: c# asp.net asp.net-core json.net asp.net-core-webapi


【解决方案1】:

.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;
    });

至于根据环境切换选项,this answer应该会有所帮助。

【讨论】:

  • 请注意SerializerSettingsMicrosoft.AspNetCore.Mvc 中,但要使用Formatting,您需要using Newtonsoft.Json
  • 这就是我需要的options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
  • 在 2.x 中,我们曾经为 Json 添加一个 MediaTypeMapping 为“application/json”(否则浏览器会忽略格式)。我们如何在 3.0 及更高版本中添加类似的映射?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    在 .NetCore 3+ 中,您可以按如下方式实现:

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

    【讨论】:

    • 这是现在最好的答案。我刚刚提交了一个建议的编辑,以将其合并到 DavidG 接受的答案中。
    【解决方案4】:

    在我的项目中,我将Microsoft.AspNetCore.Mvc 与下面的代码一起用于所有控制器。这适用于 .NET Core 3。

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers()
                    .AddNewtonsoftJson(options =>
                    {
                        options.SerializerSettings.Formatting = Formatting.Indented;
                    });
        }
    

    【讨论】:

      【解决方案5】:

      如果您只希望此选项用于特定操作,请使用 System.Text.Json

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        • 2015-05-17
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        相关资源
        最近更新 更多