在ASP.NET Web API上抑制具有null值的属性

Jul*_*ira 85 asp.net-web-api

我已经创建了一个将由移动应用程序使用的ASP.Net WEB API项目.我需要响应json省略null属性而不是返回它们property: null.

我怎样才能做到这一点?

Fil*_*p W 127

WebApiConfig:

config.Formatters.JsonFormatter.SerializerSettings = 
                 new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要更多控制,可以替换整个格式化程序:

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

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);
Run Code Online (Sandbox Code Playgroud)

  • 从Json.NET 5开始(对以前的版本不确定),您也可以这样做:`config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore` - 这将更新空值处理而不重置任何其他json序列化设置(喜欢在属性的第一个字母上使用小写) (7认同)
  • 是否有可能只为一个属性做到这一点? (6认同)
  • 羞耻config.Formatters.XmlFormatter没有相同的属性......:/ (2认同)
  • 如果更改应该在每个属性的基础上发生,并且使用足够新的 Json.Net 版本,则可以在属性上使用此属性:`[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]`。 (2认同)

sbo*_*ema 32

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

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
Run Code Online (Sandbox Code Playgroud)


小智 16

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

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Run Code Online (Sandbox Code Playgroud)


goo*_*gic 6

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


ilk*_*nal 5

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

    }
Run Code Online (Sandbox Code Playgroud)