System.Text.Json中DefaultValueHandling.Ignore的替代方案
结论
是支持的。你之前看到的不支持结论仅针对.NET Core 3.1阶段的初代System.Text.Json版本,目前.NET 5及以上所有稳定版本(含最新.NET 8)都已经原生提供DefaultValueHandling.Ignore的等效能力,无需回退使用Json.NET。
具体配置方式
单属性配置
和你给出的Json.NET写法一一对应,只需要用JsonIgnore特性指定忽略条件,属性名映射改用JsonPropertyName即可:
[JsonPropertyName("pair")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string[]? Symbols { get; set; }
配置后,当Symbols为null(数组类型的默认值)时,序列化结果会自动跳过该字段,行为和Json.NET完全一致。
全局默认配置
如果需要全局生效,给序列化配置项设置默认忽略规则即可:
var options = new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault }; var json = JsonSerializer.Serialize(targetObj, options);
配置后所有属性在值为对应类型的CLR默认值(引用类型null、值类型0/false/空结构体等)时,都会被自动忽略。
自定义默认值场景
如果需要忽略通过[DefaultValue]特性标记的自定义默认值(比如给int属性设置默认值为100,值为100时不序列化),.NET 7及以上版本已经原生支持,上述配置会自动识别[DefaultValue]标记的规则,不需要额外编写自定义转换器。
内容的提问来源于stack exchange,提问作者nop
相关产品推荐
相关产品推荐

