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

93

在.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; }
15个回答

1
很多答案,我过去实际上使用了其中一两个,但是目前在DOTNET 7+(可能也适用于6)中,就像最小API教程的配置JSON序列化选项部分所示,它非常简单。只需按照下面的摘录使用Builder.Services.ConfigureHttpJsonOptions()即可。
var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureHttpJsonOptions(options => {
    options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    // set other desired options here...
    options.SerializerOptions.WriteIndented = true;
    options.SerializerOptions.IncludeFields = true;
});

var app = builder.Build();

现在您还可以轻松地(有关更多信息,请参阅教程)按照以下方式为每个端点添加选项:

// creates a JsonSerializerOptions object with default "Web" options
var options = new JsonSerializerOptions(JsonSerializerDefaults.Web)
    { WriteIndented = true };

// pass it to the endpoint mapping 
app.MapGet("/", () => 
    Results.Json(new Todo { Name = "Walk dog", IsComplete = false }, options));

0

我在我的 .net core v3.1 MVC api 中使用了以下代码。

 services.AddMvc().AddJsonOptions(options =>
            {

                options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
            });

0
如果您正在使用.NET 6并想要在REST响应中摆脱空值,在Program.cs中只需添加以下几行代码即可:
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    });

0

在 .Net 6 中,还有一种针对特定 ObjectResult 的方法:

public class IdentityErrorResult : BadRequestObjectResult
{
    public IdentityErrorResult([ActionResultObjectValue] object? error) : base(error)
    {
        Formatters.Add(new SystemTextJsonOutputFormatter(new JsonSerializerOptions
        {
            DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
        }));
    }
}

在控制器中:

public IdentityErrorResult IdentityError(ErrorResponseObject value)
  => new IdentityErrorResult(value);

-1

以下代码适用于我在 .Net Core 2.2 中使用

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接