我有一个用.NET6开发的API.目前,所有返回为空的属性都通过以下方式隐藏:
_ = services.AddControllers().AddJsonOptions(options => {
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; });
我还需要忽略空字符串的值.在那里,我实现了以下转换器:
public class EmptyStringConverter : JsonConverter<string>
{
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.GetString()!;
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
{
if (!string.IsNullOrEmpty(value))
{
writer.WriteStringValue(value);
}
else
{
writer.WriteNullValue();
}
}
}
将转换器添加到AddJsonOptions
:
_ = services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new EmptyStringConverter());
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
转换器正在工作-将空字符串属性更改为NULL,但在API响应中,这些属性是可见的,尽管我已经设置了
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull.
我查看了其他文章,指出要添加默认属性,但这意味着必须更改所有模型的所有属性,这是不可行的.此外,这也意味着值为0的数字将被隐藏,这不是我想要的.
我需要使用System.Text.Json而不是Newtonsoft.
请问有什么办法可以做到这一点吗?