Suprimir propiedades con valor nulo en ASP.NET Web API


94

He creado un proyecto de API WEB ASP.Net que será utilizado por una aplicación móvil. Necesito la respuesta json para omitir las propiedades nulas en lugar de devolverlas como property: null.

¿Cómo puedo hacer esto?

Respuestas:


132

En el WebApiConfig:

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

O, si desea más control, puede reemplazar todo el formateador:

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

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

2
Vergüenza config.Formatters.XmlFormatter no tiene la misma propiedad ...: /
RoboJ1M

8
Desde Json.NET 5 (no estoy seguro para versiones anteriores), también puede hacer esto: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- esto actualizará el manejo del valor nulo sin restablecer ninguna otra configuración de serialización json (como usar minúsculas en la primera letra de las propiedades)
Ivaylo Slavov

7
¿Es posible conseguir que lo haga para una sola propiedad?
Martin Brown

1
el NullValueHandling = NullValueHandling.Ignore no funcionó para mis resultados
Nathan Tregillus

2
Si el cambio debe ocurrir en función de cada propiedad, y uno está utilizando una nueva versión de lo suficiente Json.Net, se puede utilizar este atributo en la propiedad: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann

32

Terminé con este fragmento de código en el archivo startup.cs usando ASP.NET5 1.0.0-beta7

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

13

Para ASP.NET Core 3.0, el ConfigureServices()método en el Startup.cscódigo debe contener:

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

¿Cuál es la pregunta?
Orestis Zekai

4

Si está utilizando vnext, en proyectos de api web de vnext, agregue este código al archivo 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

También puedes usar [DataContract]y [DataMember(EmitDefaultValue=false)]atributos


1
Esta es la única respuesta que cubre tanto la respuesta xml como la json.
ColmanJ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.