In asp.net core 2.2 I used to have the following,
  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
}
However in 3.0 using:
services.AddControllersWithViews(options =>
and the type JsonOutputFormatter is no longer available. 
What is the current suggested way of customizing a json response globally?
I tried using IOutputFormatter but it doesn't seem to be wired in when I set it within AddControllersWithViews as an OutputFormatters so not sure if there are extra steps? 
Would middleware with the new endpoint routing be an option? Or is there a better way of achieving this?
To revert back to NewtonsoftJson and also configure its output formatter, first add a package reference to Microsoft.AspNetCore.Mvc.NewtonsoftJson and then in ConfigureServices you need to call Configure after calling AddController and AddNewtonsoftJson:
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
            .AddNewtonsoftJson();
    
    services.Configure<MvcOptions>(options =>
        {
            NewtonsoftJsonOutputFormatter jsonOutputFormatter = options.OutputFormatters.OfType<NewtonsoftJsonOutputFormatter>().Single();
        
            // makes changes to the Newtonsoft JSON Output Formatter here.
        });
}
                        I personally use Json.NET
services.AddMvc().AddNewtonsoftJson();
Json.NET settings can be set in the call to AddNewtonsoftJson:
services.AddMvc()
    .AddNewtonsoftJson(options =>
           options.SerializerSettings.ContractResolver =
              new CamelCasePropertyNamesContractResolver());
I am using the default options with compatibility mode
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
            .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver =
             new DefaultContractResolver(); });
Reference Migrate from ASP.Net 2.2 to 3.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With