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?

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

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

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

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

    }

4

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


1
C'est la seule réponse qui couvre à la fois la réponse xml et json.
ColmanJ
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.