Menekan properti dengan nilai null di ASP.NET Web API

94

Saya telah membuat Proyek API WEB ASP.Net yang akan digunakan oleh aplikasi seluler. Saya memerlukan respons json untuk menghilangkan properti null alih-alih mengembalikannya sebagai property: null.

Bagaimana saya bisa melakukan ini?

Juliano Nunes Silva Oliveira
sumber

Jawaban:

132

Di WebApiConfig:

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

Atau, jika Anda menginginkan lebih banyak kontrol, Anda bisa mengganti seluruh pemformat:

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

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);
Filip W
sumber
2
Malu config.Formatters.XmlFormatter tidak memiliki Properti yang sama ...: /
RoboJ1M
8
Karena Json.NET 5 (tidak yakin untuk versi sebelumnya), Anda juga dapat melakukan ini: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- ini akan memperbarui penanganan nilai null tanpa menyetel ulang pengaturan serialisasi json lainnya (seperti menggunakan huruf kecil pada huruf pertama properti)
Ivaylo Slavov
7
Apakah mungkin melakukannya hanya untuk satu properti?
Martin Brown
1
the NullValueHandling = NullValueHandling.Ignore tidak bekerja untuk hasil saya
Nathan Tregillus
2
Jika perubahan harus terjadi pada basis per-properti, dan satu menggunakan versi yang cukup baru Json.Net, satu dapat menggunakan atribut ini di properti: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann
32

Saya berakhir dengan potongan kode ini di file startup.cs menggunakan ASP.NET5 1.0.0-beta7

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
sboulema.dll
sumber
13

Untuk ASP.NET Core 3.0, ConfigureServices()metode dalam Startup.cskode harus berisi:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Dave Werner
sumber
Apa pertanyaannya?
Orestis Zekai
4

Jika Anda menggunakan vnext, di proyek api web vnext, tambahkan kode ini ke 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);
        });

    }
ilker unal
sumber
4

Anda juga dapat menggunakan [DataContract]dan [DataMember(EmitDefaultValue=false)]atribut

goofballLogic
sumber
1
Ini adalah satu-satunya jawaban yang mencakup respons xml dan json.
ColmanJ