Where did IMvcBuilder AddJsonOptions go in .Net Core 3.0?

C#asp.netasp.net Corejson.netasp.net Core-3.0

C# Problem Overview


I've just upgraded my ASP web API project from .Net core 2.0 to 3.0. I was using

     services.AddMvc()
             .AddJsonOptions(options =>options.SerializerSettings.ContractResolver 
                                       = new DefaultContractResolver());

previously to ensure lower-casing of the serialized JSON.

After the upgrade to 3.0 I get this error:

> Error CS1061 'IMvcBuilder' does not contain a definition for > 'AddJsonOptions' and no accessible extension method 'AddJsonOptions' > accepting a first argument of type 'IMvcBuilder' could be found (are > you missing a using directive or an assembly reference?)

According to https://stackoverflow.com/questions/54051802/addjsonoptions-for-mvcjsonoptions-in-asp-net-core-2-2 the AddJsonOptions extension method is/was provided by the Microsoft.AspNetCore.Mvc.Formatters.Json nuget package. I have tried installing/reinstalling this but still can't resolve the method. Interestingly, intellisense only shows Microsoft.AspNetCore.Mvc.Formatters.Xml when I try to add the using statement even though I added the Json nuget package.

Any ideas what is going on? The documentation for AddJsonOptions only goes up to .Net 2.2 so perhaps the method has been deprecated in 3.0 in favor of some other configuration mechanism?

C# Solutions


Solution 1 - C#

As part of ASP.NET Core 3.0, the team moved away from including Json.NET by default. You can read more about that in general in the announcement on breaking changes to Microsoft.AspNetCore.App.

Instead of Json.NET, ASP.NET Core 3.0 and .NET Core 3.0 include a different JSON API that focuses a bit more on performance. You can learn about that more in the announcement about “The future of JSON in .NET Core 3.0”.

The new templates for ASP.NET Core will no longer bundle with Json.NET but you can easily reconfigure the project to use it instead of the new JSON library. This is important for both compatibility with older projects and also because the new library is not supposed to be a full replacement, so you won't see the full feature set there.

In order to reconfigure your ASP.NET Core 3.0 project with Json.NET, you will need to add a NuGet reference to Microsoft.AspNetCore.Mvc.NewtonsoftJson, which is the package that includes all the necessary bits. Then, in the Startup’s ConfigureServices, you will need to configure MVC like this:

services.AddControllers()
    .AddNewtonsoftJson();

This sets up MVC controllers and configures it to use Json.NET instead of that new API. Instead of controllers, you can also use a different MVC overload (e.g. for controllers with views, or Razor pages). That AddNewtonsoftJson method has an overload that allows you to configure the Json.NET options like you were used to with AddJsonOptions in ASP.NET Core 2.x.

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

Solution 2 - C#

This worked for me, while using .Net Core 3:

services.AddMvc().AddJsonOptions(o =>
{
    o.JsonSerializerOptions.PropertyNamingPolicy = null;
    o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});

Solution 3 - C#

Make sure that you installed the Microsoft.AspNetCore.Mvc.NewtonsoftJson package.

enter image description here

Solution 4 - C#

This would help

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers().AddJsonOptions(options=> {  options.JsonSerializerOptions.PropertyNamingPolicy = null;
                 options.JsonSerializerOptions.DictionaryKeyPolicy = null;
               
            });

            services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
        }

Solution 5 - C#

This would help try Installing the Nuget Package

Microsoft.AspNetCore.Mvc.NewtonsoftJson

Solution 6 - C#

It's work for me, Install the NewtonsoftJson package from NuGet "dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0" version 3.1.0 working for ASP.NET Core 3.0 and use the Following Code-

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
    .AddNewtonsoftJson(opt => {
        opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    });

Hope it's Working Fine, Thanks.

Solution 7 - C#

This worked for me, while using .Net Core 3: click here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNeilMacMullenView Question on Stackoverflow
Solution 1 - C#pokeView Answer on Stackoverflow
Solution 2 - C#Mohammad OlfatmiriView Answer on Stackoverflow
Solution 3 - C#Drilon AhmetajView Answer on Stackoverflow
Solution 4 - C#NirmalaView Answer on Stackoverflow
Solution 5 - C#Adil BhattiView Answer on Stackoverflow
Solution 6 - C#SAMView Answer on Stackoverflow
Solution 7 - C#Justus kasyokiView Answer on Stackoverflow