Pomiń właściwości z wartością null w interfejsie ASP.NET Web API

96

Stworzyłem projekt ASP.Net WEB API, który będzie używany przez aplikację mobilną. Potrzebuję pliku JSON odpowiedzi, aby pominąć właściwości null zamiast zwracać je jako property: null.

Jak mogę to zrobić?

Juliano Nunes Silva Oliveira
źródło

Odpowiedzi:

133

W WebApiConfig:

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

Lub, jeśli chcesz mieć większą kontrolę, możesz wymienić cały formater:

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

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);
Filip W.
źródło
2
Shame config.Formatters.XmlFormatter nie ma tej samej właściwości ...: /
RoboJ1M
9
Od Json.NET 5 (brak pewności co do poprzednich wersji), możesz również zrobić to: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- zaktualizuje to obsługę wartości null bez resetowania innych ustawień serializacji json (np. Używanie małych liter w pierwszej literze właściwości)
Ivaylo Slavov
7
Czy można to zrobić tylko dla jednej nieruchomości?
Martin Brown
1
the NullValueHandling = NullValueHandling.Ignore nie działało dla moich wyników
Nathan Tregillus
2
Jeżeli zmiana powinno nastąpić na podstawie właściwości, a jeden jest za pomocą wystarczająco nową wersję Json.NET, można użyć tego atrybutu na własność: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann
32

Skończyło się na tym fragmencie kodu w pliku startup.cs przy użyciu ASP.NET5 1.0.0-beta7

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
sboulema
źródło
13

W przypadku ASP.NET Core 3.0 ConfigureServices()metoda w Startup.cskodzie powinna zawierać:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Dave Werner
źródło
Jakie jest pytanie?
Orestis Zekai
5

Jeśli używasz vnext, w projektach vnext Web API, dodaj ten kod do pliku 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
źródło
4

Możesz także użyć atrybutów [DataContract]i[DataMember(EmitDefaultValue=false)]

goofballLogic
źródło
1
Jest to jedyna odpowiedź, która obejmuje zarówno odpowiedź XML, jak i JSON.
ColmanJ