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

97

Я создал проект веб-API ASP.Net, который будет использоваться мобильным приложением. Мне нужен ответ json, чтобы опустить нулевые свойства вместо того, чтобы возвращать их как property: null.

Как я могу это сделать?

Жулиано Нуньес Сильва Оливейра
источник

Ответы:

133

В 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
Позор config.Formatters.XmlFormatter не имеет такого же свойства ...: /
RoboJ1M 01
9
Начиная с Json.NET 5 (не уверен для предыдущих версий), вы также можете сделать это: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- это обновит обработку нулевого значения без сброса каких-либо других настроек сериализации json (например, с использованием нижнего регистра в первой букве свойств)
Ивайло Славов
7
Можно ли заставить это сделать это только для одного свойства?
Мартин Браун,
1
NullValueHandling = NullValueHandling.Ignore не работал с моими результатами
Натан Трегиллус,
2
Если изменение должно происходить на основе за собственность, и один использует достаточно новую версию Json.NET, можно использовать этот атрибут объекта: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann 03
32

В итоге я получил этот фрагмент кода в файле startup.cs, используя ASP.NET5 1.0.0-beta7.

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
сбоулема
источник
14

Для ASP.NET Core 3.0 ConfigureServices()метод в Startup.csкоде должен содержать:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Дэйв Вернер
источник
В чем вопрос?
Орестис Зекай
5

Если вы используете vnext, в проектах vnext web api добавьте этот код в файл 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
источник
4

Вы также можете использовать [DataContract]и [DataMember(EmitDefaultValue=false)]атрибуты

goofballLogic
источник
1
Это единственный ответ, который охватывает ответы как xml, так и json.
ColmanJ