首页 > 解决方案 > ASP.NET Core 3.0 中的 JsonOutputFormatter

问题描述

在 asp.net core 2.2 中,我曾经有以下内容,

  var jsonSettings = new JsonSerializerSettings
  {
    ContractResolver = new SubstituteNullWithEmptyStringContractResolver()
  };

services.AddMvc(options =>
{
        options.OutputFormatters.RemoveType<JsonOutputFormatter>();
        options.OutputFormatters.Add(new ResponseJsonOutputFormatter(jsonSettings,ArrayPool<char>.Shared));
}

public class ResponseJsonOutputFormatter : JsonOutputFormatter
{
 // Stuff in here
}

但是在 3.0 中使用:

services.AddControllersWithViews(options =>

并且该类型JsonOutputFormatter不再可用。

当前建议的全局自定义 json 响应的方法是什么?

我尝试使用IOutputFormatter,但是当我将它设置为 OutputFormatters 时,它似乎没有连接,AddControllersWithViews所以不确定是否有额外的步骤?

带有新端点路由的中间件会是一种选择吗?还是有更好的方法来实现这一目标?

标签: c#jsonasp.net-core-3.0

解决方案


我个人使用 Json.NET

services.AddMvc().AddNewtonsoftJson();

Json.NET 设置可以在调用中设置AddNewtonsoftJson

services.AddMvc()
    .AddNewtonsoftJson(options =>
           options.SerializerSettings.ContractResolver =
              new CamelCasePropertyNamesContractResolver());

我正在使用兼容模式的默认选项

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
            .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver =
             new DefaultContractResolver(); });

参考 从 ASP.Net 2.2 迁移到 3.0


推荐阅读