在.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; }
答案 0 :(得分:58)
在Startup.cs中,您可以将JsonOptions附加到服务集合并设置各种配置,包括删除空值:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
}
答案 1 :(得分:8)
我发现对于dotnet core 3来说,它可以解决-
services.AddControllers().AddJsonOptions(options => {
options.JsonSerializerOptions.IgnoreNullValues = true;
});
答案 2 :(得分:5)
如果您不想修改全局行为,也可以在每个控制器上完成:
public IActionResult GetSomething()
{
var myObject = GetMyObject();
return new JsonResult(myObject, new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore
});
};
答案 3 :(得分:5)
在 net Core 5
中,实际上是 DefaultIgnoreCondition
:
public void ConfigureServices(IServiceCollection services)
{
services
.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
});
}
这将防止任何空值的序列化和反序列化,而无需属性的任何额外属性。
答案 4 :(得分:1)
在Asp.Net Core中,您还可以通过返回
,以action方法进行操作return new JsonResult(result, new JsonSerializerOptions
{
IgnoreNullValues = true,
});
答案 5 :(得分:0)
以下内容适用于.NET Core 3.0,位于Startup.cs> ConfigureServices()中:
services.AddMvc()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.IgnoreNullValues = true;
});
答案 6 :(得分:0)
下面的代码在.Net core 2.2中对我有用
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
答案 7 :(得分:0)
我在我的 .net core v3.1 MVC api 中使用了以下内容。
services.AddMvc().AddJsonOptions(options =>
{
options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
});