.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
相关产品推荐
相关产品推荐

