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

94

J'ai créé un projet API WEB ASP.Net qui sera utilisé par une application mobile. J'ai besoin de la réponse json pour omettre les propriétés nulles au lieu de les renvoyer comme property: null.

Comment puis-je faire ceci?

Juliano Nunes Silva Oliveira
la source

Réponses:

132

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);
Filip W
la source
2
Honte config.Formatters.XmlFormatter n'a pas la même propriété ...: /
RoboJ1M
8
Depuis Json.NET 5 (pas sûr pour les versions précédentes), vous pouvez également le faire: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- cela mettra à jour la gestion des valeurs nulles sans réinitialiser les autres paramètres de sérialisation json (comme l'utilisation de minuscules sur la première lettre de propriétés)
Ivaylo Slavov
7
Est-il possible de le faire faire pour une seule propriété?
Martin Brown
1
the NullValueHandling = NullValueHandling.Ignore n'a pas fonctionné pour mes résultats
Nathan Tregillus
2
Si le changement doit se produire sur une base par propriété, et l'on utilise une version suffisamment nouvelle de Json.Net, on peut utiliser cet attribut sur la propriété: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann
32

J'ai fini 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;
});
sboulema
la source
13

Pour ASP.NET Core 3.0, la ConfigureServices()méthode dans le Startup.cscode doit contenir:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Dave Werner
la source
Quelle est la question?
Orestis Zekai du
4

Si vous utilisez vnext, dans les projets API Web vnext, 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);
        });

    }
ilker unal
la source
4

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

goofballLogic
la source
1
C'est la seule réponse qui couvre à la fois la réponse xml et json.
ColmanJ