Придушення властивостей із нульовим значенням у веб-API ASP.NET


94

Я створив проект ASP.Net WEB API, який використовуватиметься мобільним додатком. Мені потрібна відповідь json, щоб опустити нульові властивості, а не повертати їх як property: null.

Як я можу це зробити?

Відповіді:


132

У WebApiConfig:

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

Або, якщо ви хочете отримати більше контролю, ви можете замінити весь форматтер:

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

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

2
Shame config.Formatters.XmlFormatter не має однакових властивостей ...: /
RoboJ1M

8
Оскільки Json.NET 5 (не впевнений у попередніх версіях), ви також можете зробити це: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- це оновить обробку нульових значень без скидання будь-яких інших параметрів серіалізації json (наприклад, використання нижнього регістру на першій букві властивостей)
Івайло Славов

7
Чи можна змусити це зробити це лише для однієї власності?
Мартін Браун

1
the NullValueHandling = NullValueHandling.Ignore не спрацював на мої результати
Nathan Tregillus

2
Якщо зміна має відбуватися на основі за власність, і один використовує досить нову версію Json.NET, можна використовувати цей атрибут об'єкта: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Карстен Фюрман

32

Я отримав цей фрагмент коду у файлі startup.cs за допомогою ASP.NET5 1.0.0-beta7

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

13

Для ASP.NET Core 3.0 ConfigureServices()метод у Startup.csкоді повинен містити:

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

Яке питання?
Орестіс

4

Якщо ви використовуєте vnext, у веб-проектах api vnext додайте цей код у файл 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

Ви також можете використовувати [DataContract]і [DataMember(EmitDefaultValue=false)]атрибути


1
Це єдина відповідь, яка охоплює як відповідь xml, так і json.
ColmanJ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.