102 votes

Suppression des propriétés avec une valeur nulle sur l'API Web ASP.NET

J'ai créé un projet ASP.Net WEB API qui sera utilisé par une application mobile. J'ai besoin que le json de la réponse omette les propriétés nulles au lieu de les retourner en tant que property: null .

Comment puis-je le faire ?

143voto

Filip W Points 13343

Dans le WebApiConfig :

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

Ou, si vous voulez plus de contrôle, vous pouvez remplacer tout le formateur :

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

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);

33voto

sboulema Points 627

Je me suis retrouvé avec ce morceau de code dans le fichier startup.cs en utilisant ASP.NET5 1.0.0-beta7

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});

22voto

Dave Werner Points 300

Pour ASP.NET Core 3.0, l'option ConfigureServices() méthode dans Startup.cs doit contenir :

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });

8voto

goofballLogic Points 508

Vous pouvez également utiliser [DataContract] y [DataMember(EmitDefaultValue=false)] attributs

5voto

ilker unal Points 197

Si vous utilisez vnext, dans les projets vnext web api, ajoutez ce code au fichier startup.cs.

    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);
        });

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X