You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET使用System.Text.Json时,如何基于其他属性值忽略JSON属性

实现仅当Age>18时序列化Name属性的方案

可以实现,无需自定义序列化器,利用System.Text.Json的ShouldSerialize约定就能完成需求。

具体做法是在Foo类中添加一个命名为ShouldSerialize{PropertyName}的布尔方法(这里对应ShouldSerializeName),方法内部判断Age > 18的条件,序列化时JsonSerializer会自动调用这个方法,决定是否序列化Name属性。

修改后的类代码:

public class Foo
{
    public string Name { get; set; }
    public int Age { get; set; }

    // 序列化时自动调用此方法判断是否序列化Name
    public bool ShouldSerializeName()
    {
        return Age > 18;
    }
}

测试示例:

// Age>18的场景,会序列化Name
var adult = new Foo { Name = "John", Age = 25 };
string adultJson = JsonSerializer.Serialize(adult);
// 输出结果: {"Name":"John","Age":25}

// Age<=18的场景,不会序列化Name
var minor = new Foo { Name = "Lily", Age = 16 };
string minorJson = JsonSerializer.Serialize(minor);
// 输出结果: {"Age":16}

补充说明:这个约定是System.Text.Json原生支持的(.NET Core 3.0及以上版本可用),不需要额外引用或配置,完全满足无需自定义序列化器、不用额外属性的要求。

内容的提问来源于stack exchange,提问作者Bulchsu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:06:26