ASP.NET Core 3.0 中的 JsonOutputFormatter

Mic*_*ves 12 c# json asp.net-core-3.0

在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
}
Run Code Online (Sandbox Code Playgroud)

但是在 3.0 中使用:

services.AddControllersWithViews(options =>
Run Code Online (Sandbox Code Playgroud)

并且类型JsonOutputFormatter不再可用。

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

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

具有新端点路由的中间件是一种选择吗?或者有没有更好的方法来实现这一目标?

Gid*_*aya 11

我个人使用 Json.NET

services.AddMvc().AddNewtonsoftJson();
Run Code Online (Sandbox Code Playgroud)

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

services.AddMvc()
    .AddNewtonsoftJson(options =>
           options.SerializerSettings.ContractResolver =
              new CamelCasePropertyNamesContractResolver());
Run Code Online (Sandbox Code Playgroud)

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

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
            .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver =
             new DefaultContractResolver(); });
Run Code Online (Sandbox Code Playgroud)

参考 从 ASP.Net 2.2 迁移到 3.0

  • 如果您正在做的是将输出重写为不同的结构,则这不起作用。它仅处理格式外观的选项。 (5认同)