Unterdrücken Sie Eigenschaften mit dem Wert null in der ASP.NET-Web-API

94

Ich habe ein ASP.Net WEB API-Projekt erstellt, das von einer mobilen Anwendung verwendet wird. Ich brauche die Antwort json, um Null-Eigenschaften wegzulassen, anstatt sie als zurückzugeben property: null.

Wie kann ich das machen?

Juliano Nunes Silva Oliveira
quelle

Antworten:

132

In der WebApiConfig:

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

Wenn Sie mehr Kontrolle wünschen, können Sie den gesamten Formatierer ersetzen:

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

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);
Filip W.
quelle
2
Schade, config.Formatters.XmlFormatter hat nicht die gleiche Eigenschaft ...: /
RoboJ1M
8
Seit Json.NET 5 (nicht sicher für frühere Versionen) können Sie auch Folgendes tun: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- Dadurch wird die Nullwertbehandlung aktualisiert, ohne dass andere Einstellungen für die json-Serialisierung zurückgesetzt werden müssen (z. B. die Verwendung von Kleinbuchstaben im ersten Buchstaben der Eigenschaften).
Ivaylo Slavov
7
Ist es möglich, dass es nur für eine einzelne Immobilie ausgeführt wird?
Martin Brown
1
the NullValueHandling = NullValueHandling.Ignore hat für meine Ergebnisse nicht funktioniert
Nathan Tregillus
2
Wenn die Änderung pro Eigenschaft erfolgen soll und eine ausreichend neue Version von Json.Net verwendet wird, kann dieses Attribut für die Eigenschaft verwendet werden : [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann
32

Ich habe diesen Code in der Datei startup.cs mit ASP.NET5 1.0.0-beta7 gefunden

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

Für ASP.NET Core 3.0 sollte die ConfigureServices()Methode im Startup.csCode Folgendes enthalten:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Dave Werner
quelle
Was ist die Frage?
Orestis Zekai
4

Wenn Sie vnext verwenden, fügen Sie diesen Code in vnext-Web-API-Projekten zur Datei startup.cs hinzu.

    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
quelle
4

Sie können auch [DataContract]und [DataMember(EmitDefaultValue=false)]Attribute verwenden

goofballLogic
quelle
1
Dies ist die einzige Antwort, die sowohl die XML- als auch die JSON-Antwort abdeckt.
ColmanJ