Sopprimere le proprietà con valore null sull'API Web ASP.NET


94

Ho creato un progetto ASP.Net WEB API che verrà utilizzato da un'applicazione mobile. Ho bisogno della risposta json per omettere le proprietà null invece di restituirle come property: null.

Come posso fare questo?

Risposte:


132

In WebApiConfig:

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

Oppure, se desideri un maggiore controllo, puoi sostituire l'intero formattatore:

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

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

2
Vergogna config.Formatters.XmlFormatter non ha la stessa proprietà ...: /
RoboJ1M

8
Dal momento che Json.NET 5 (non sicuro per le versioni precedenti), puoi anche fare questo: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- questo aggiornerà la gestione del valore nullo senza resettare altre impostazioni di serializzazione json (come l'uso di lettere minuscole sulla prima lettera delle proprietà)
Ivaylo Slavov

7
È possibile farlo per un singolo immobile?
Martin Brown

1
NullValueHandling = NullValueHandling.Ignore non ha funzionato per i miei risultati
Nathan Tregillus

2
Se il cambiamento dovrebbe avvenire su una base per-proprietà, e si sta usando un sufficientemente nuova versione di Json.Net, si può usare questo attributo sulla proprietà: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann

32

Ho finito con questo pezzo di codice nel file startup.cs usando ASP.NET5 1.0.0-beta7

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

13

Per ASP.NET Core 3.0, il ConfigureServices()metodo nel Startup.cscodice dovrebbe contenere:

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

Qual'è la domanda?
Orestis Zekai

4

Se stai usando vnext, nei progetti vnext web api, aggiungi questo codice al file 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

Puoi anche usare [DataContract]e [DataMember(EmitDefaultValue=false)]attributi


1
Questa è l'unica risposta che copre sia la risposta xml che quella json.
ColmanJ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.