You need to enable JavaScript to run this app. ASP.NET Core中如何配置[JsonIgnore]仅在API返回时忽略标注属性,入参不忽略?
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中如何配置[JsonIgnore]仅在API返回时忽略标注属性,入参不忽略?

ASP.NET Core 实现单向JSON忽略的配置方案

默认无参数的[JsonIgnore]特性会在序列化(API响应输出)和反序列化(客户端请求接收)两个阶段都跳过目标属性,要实现“响应时隐藏字段、请求时正常接收字段”的需求,只需要根据使用的.NET 版本调整特性的配置参数即可,不需要编写复杂的自定义序列化逻辑。

.NET 8 及以上版本:直接调整特性参数

ASP.NET Core 默认使用的JSON序列化组件为System.Text.Json,该组件在.NET 8版本中补充了精准的忽略时机控制,只需要给[JsonIgnore]指定对应的Condition参数,就能直接匹配需求:

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }

    // 序列化阶段无条件忽略该属性,反序列化阶段正常处理传入值
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWriting)]
    public string Password { get; set; }
}

该配置的实际运行效果:

  • 当API将User对象序列化为响应JSON时,无论Password属性存储了什么值,都不会被包含在返回内容中,可有效避免密码等敏感信息泄露;
  • 当客户端发送的请求JSON中携带Password字段时,反序列化过程会正常将值赋值到User对象的Password属性上,不会丢失传入的参数值。

.NET 7 及更早版本:等效实现方式

旧版本的System.Text.Json没有提供JsonIgnoreCondition.WhenWriting枚举值,无法通过单一特性参数直接实现单向忽略,此时可以通过调整属性访问器的方式实现同样的效果,不需要依赖自定义序列化逻辑:

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }

    // 公开set访问器:反序列化时可正常写入JSON传入的参数值
    // 私有get访问器:序列化时无法读取属性值,自然不会被输出到响应JSON中
    public string Password { private get; set; }
}

这种方式的实现原理是:System.Text.Json 默认只会序列化带有公开get访问器的属性,对非公开get的属性会自动跳过;而反序列化过程只要存在公开的set访问器,就可以正常完成参数绑定,刚好匹配“入站接收、出站隐藏”的需求。

常见配置误区

  • 不要直接使用无参数的默认[JsonIgnore],默认对应Condition = JsonIgnoreCondition.Always,会在序列化和反序列化两个阶段都忽略属性,导致客户端传入的Password值无法被正常读取;
  • 不要错配JsonIgnoreCondition.WhenWritingDefault或JsonIgnoreCondition.WhenWritingNull,这两个配置只会在属性值为默认值或null时才跳过序列化,如果属性被赋予了非默认值(比如用户提交的明文密码),还是会被序列化到响应中,存在敏感信息泄露的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 15:15:05