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?

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

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

13

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

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

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

    }

4

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


1
Ini adalah satu-satunya jawaban yang mencakup respons xml dan json.
ColmanJ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.