102

I've created an ASP.Net WEB API Project that will be used by a mobile application. I need the response json to omit null properties instead of return them as property: null.

How can I do this?

Liam
  • 27,717
  • 28
  • 128
  • 190
juliano.net
  • 7,982
  • 13
  • 70
  • 164

7 Answers7

143

In the WebApiConfig:

config.Formatters.JsonFormatter.SerializerSettings = 
                 new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};

Or, if you want more control, you can replace entire formatter:

var jsonformatter = new JsonMediaTypeFormatter
{
    SerializerSettings =
    {
        NullValueHandling = NullValueHandling.Ignore
    }
};

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);
Rey
  • 3,663
  • 3
  • 32
  • 55
Filip W
  • 27,097
  • 6
  • 95
  • 82
33

I ended up with this piece of code in the startup.cs file using ASP.NET5 1.0.0-beta7

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
sboulema
  • 837
  • 1
  • 10
  • 22
22

For ASP.NET Core 3.0, the ConfigureServices() method in Startup.cs code should contain:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Dave Werner
  • 330
  • 2
  • 6
8

You can also use [DataContract] and [DataMember(EmitDefaultValue=false)] attributes

goofballLogic
  • 37,883
  • 8
  • 44
  • 62
5

If you are using vnext, in vnext web api projects, add this code to startup.cs file.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().Configure<MvcOptions>(options =>
        {
            int position = options.OutputFormatters.FindIndex(f =>  f.Instance is JsonOutputFormatter);

            var settings = new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            };

            var formatter = new JsonOutputFormatter();
            formatter.SerializerSettings = settings;

            options.OutputFormatters.Insert(position, formatter);
        });

    }
ilker unal
  • 502
  • 1
  • 6
  • 15
3

Since I cannot comment due to my low reputation. Adding to Dave Wegner's answer since it is obsolete the current solution is:

services.AddControllers().AddJsonOptions(options =>
            options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
        );
0
builder.Services.AddControllersWithViews().AddJsonOptions(options =>
{  
    options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
Anindya Dey
  • 825
  • 1
  • 8
  • 18
  • 2
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jun 19 '23 at 18:05