.NET Core:从API JSON响应中删除空字段

dot*_*kow 41 serialization json .net-core asp.net-core-1.0

在.NET Core 1.0的全局级别(所有API响应)中,如何配置Startup.cs以便在JSON响应中删除/忽略空字段?

使用Newtonsoft.Json,您可以将以下属性应用于属性,但我希望避免将其添加到每个属性:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string FieldName { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string OtherName { get; set; }
Run Code Online (Sandbox Code Playgroud)

dot*_*kow 76

在Startup.cs中,您可以将JsonOptions附加到服务集合并设置各种配置,包括删除空值,其中:

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

  • 使用.NET Core 2.1进行测试,这是有效的. (4认同)
  • 我面临着类似的情况,但想要删除控制器中特定给定 API 端点的 Null 值,而不是全部。我们有办法做到这一点吗 (4认同)
  • 我的 API 返回一个具有多个其他复杂节点的复杂对象。即使有空/空值,这些键也可以在响应 json 中看到。尝试了这个解决方案,但它不起作用。如果响应 json 具有复杂对象,这将不起作用吗? (3认同)

小智 10

我发现对于 dotnet core 3 这解决了它 -

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

  • 请考虑详细说明以更好地解释您的答案。 (2认同)

Tod*_*Tod 8

具有最小 API 的 .Net core 6:

using Microsoft.AspNetCore.Http.Json;

builder.Services.Configure<JsonOptions>(options => 
         options.SerializerOptions.DefaultIgnoreCondition 
   = JsonIgnoreCondition.WhenWritingDefault | JsonIgnoreCondition.WhenWritingNull);
Run Code Online (Sandbox Code Playgroud)


Moh*_*reh 8

如果您想将其应用于特定属性并且仅使用,System.Text.Json那么您可以像这样装饰属性

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Market { get; set; }
Run Code Online (Sandbox Code Playgroud)


Tom*_*myN 6

如果您不想修改全局行为,也可以按控制器完成此操作:

public IActionResult GetSomething()
{
   var myObject = GetMyObject();
   return new JsonResult(myObject, new JsonSerializerSettings() 
   { 
       NullValueHandling = NullValueHandling.Ignore 
   });
};
Run Code Online (Sandbox Code Playgroud)


bri*_*eje 5

net 5,它实际上是DefaultIgnoreCondition

public void ConfigureServices(IServiceCollection services)
        {
            services
                .AddControllers()
                .AddJsonOptions(options =>
                {
                    options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
                });
        }
Run Code Online (Sandbox Code Playgroud)

这将防止任何空值的序列化和反序列化,而不需要任何额外的属性属性。


MiF*_*vil 5

在.Net 5及更高版本中,如果您使用AddNewtonsoftJson而不是AddJsonOptions,设置如下

 services.AddMvc(options =>
     {
        //any other settings
     })
     .AddNewtonsoftJson(options =
     {
        options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
     });
Run Code Online (Sandbox Code Playgroud)