隐藏ASP.NET Web API上具有空值的属性


Answers:


132

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
Shame config.Formatters.XmlFormatter没有相同的属性...:/
RoboJ1M 2014年

8
由于Json.NET 5(对于以前的版本不确定),您还可以执行以下操作:config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore-这将更新空值处理,而无需重置任何其他json序列化设置(例如在属性的第一个字母上使用小写字母)
Ivaylo Slavov

7
是否有可能仅使用一个属性就可以做到?
马丁布朗

1
NullValueHandling = NullValueHandling.Ignore不适用于我的结果
Nathan Tregillus

2
如果更改应基于每个属性进行,并且使用的是Json.Net的较新版本,则可以在属性上使用此属性:[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
卡斯滕·弗曼(CarstenFührmann)

32

我最终使用ASP.NET5 1.0.0-beta7在startup.cs文件中获得了这段代码

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

13

对于ASP.NET Core 3.0,代码中的ConfigureServices()方法Startup.cs应包含:

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

有什么问题
奥雷斯蒂斯·泽凯

4

如果您正在使用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);
        });

    }

4

您还可以使用[DataContract][DataMember(EmitDefaultValue=false)]属性


1
这是涵盖xml和json响应的唯一答案。
ColmanJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.