我创建了一个ASP.Net WEB API项目,将被移动应用程序使用。我需要响应的JSON省略空属性,而不是将它们作为
我该怎么做?
property: null
返回。我该怎么做?
property: null
返回。在 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);
我在使用ASP.NET5 1.0.0-beta7时,在startup.cs文件中得到了这段代码。
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
对于ASP.NET Core 3.0,在Startup.cs
代码中,ConfigureServices()
方法应包含以下内容:
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.IgnoreNullValues = true;
});
您还可以使用 [DataContract]
和 [DataMember(EmitDefaultValue=false)]
属性。
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);
});
}
由于我的声望较低,无法进行评论。补充Dave Wegner的答案,因为它已经过时了,当前的解决方案是:
services.AddControllers().AddJsonOptions(options =>
options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
);
builder.Services.AddControllersWithViews().AddJsonOptions(options =>
{
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore
- 这将更新空值处理,而不会重置任何其他 JSON 序列化设置(比如在属性的首字母上使用小写)。 - Ivaylo Slavov[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
。 - Carsten Führmann