在System.Text.json返回false时,是否有一种全局级别的方法可以忽略所有布尔值?
我知道有这个全局条件,但我仍然需要返回其他默认值。
JsonSerializerOptions options = new()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
};
理想情况下不想单独添加以下所有属性。[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
2条答案
按热度按时间1l5u6lss1#
你不能对所有类型都使用自定义的JsonConverter,因为那样你就必须重新发明轮子来序列化整个东西。你也不能使用
JsonConverter<bool>
(或<bool?>
),因为你必须在它的Write()
方法中写入一个值。因此,使用自定义的
Modifiers
操作注册一个DefaultJsonTypeInfoResolver
,该操作仅在布尔值等于true时序列化它们:从MS Learn: Customize a JSON contract。自.NET 7起运行。
hujrc8aj2#
在**.NET 7及更高版本**中,您可以使用typeInfo modifier自定义类型的contract,以跳过值为false的
bool
属性的序列化。首先定义以下修饰符:
现在,如果你的模型看起来像这样,例如:
使用修改器序列化具有默认值的模型时:
将跳过false
bool
属性:但是当序列化为一个真正的
bool
值时:您将获得:
演示小提琴here。