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?
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?
Antworten:
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);
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).
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Für ASP.NET Core 3.0 sollte die ConfigureServices()Methode im Startup.csCode Folgendes enthalten:
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.IgnoreNullValues = true;
});
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);
});
}
Sie können auch [DataContract]und [DataMember(EmitDefaultValue=false)]Attribute verwenden