100

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

我怎样才能做到这一点?

4

5 回答 5

139

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);
于 2013-01-23T18:25:49.750 回答
33

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

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
于 2015-10-16T09:44:22.980 回答
19

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

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
于 2019-11-15T15:43:50.923 回答
7

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

于 2018-09-26T09:30:25.900 回答
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);
        });

    }
于 2015-04-22T13:01:31.133 回答