有条件地 [JsonIgnore]

前言

通常,在进行 JSON 序列化或反序列化时,如果要忽略某个属性,我们会使用 [JsonIgnore] 特性:

public class User
{
    public int Id { get; set; }
    [JsonIgnore]
    public string Name { get; set; }
}

var user = new User { Id = 1, Name = "MyIO" };
Console.WriteLine(JsonSerializer.Serialize(user));

//输出
{"Id":1}

偶然发现, [JsonIgnore] 特性还可以指定 Condition 属性:

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Name { get; set; }

那么它有什么作用呢?

JsonIgnoreCondition 枚举

可以通过设置 [JsonIgnore] 特性的 Condition 属性来指定条件排除。Condition 属性对应的 JsonIgnoreCondition 枚举提供下列选项:

  • Always - 始终忽略属性。如果未指定 Condition,则默认此选项

  • Never - 忽略全局设置,始终序列化和反序列化属性

public class A
{
    public string Name { get; } = "MyIO";
}

public class B
{
    [JsonIgnore( Condition = JsonIgnoreCondition.Never)]
    public string Name { get; } = "MyIO";
}

//全局设置为忽略只读属性
var options = new JsonSerializerOptions
{
    IgnoreReadOnlyProperties = true
};

Console.WriteLine(JsonSerializer.Serialize(new A(), options));
Console.WriteLine(JsonSerializer.Serialize(new B(), options));

//输出
//A 中的 Name 不会序列化,而 B 中的 Name 还是会序列化
{}
{"Name":"B"}
  • WhenWritingDefault - 如果属性值是该属性数据类型的默认值,则在序列化中忽略属性

public class User
{
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
    public int Id { get; set; }

    public string Name { get; set; }
}

var user = new User { Id = 0, Name = "" };
Console.WriteLine(JsonSerializer.Serialize(user));

//输出
{"Name":""}
  • WhenWritingNull - 如果属性值是 null,则在序列化中忽略属性

public class User
{

    public int Id { get; set; }

    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public string Name { get; set; }
}

var user = new User { Id = 1, Name = null };
Console.WriteLine(JsonSerializer.Serialize(user));

//输出
{"Id":1}

结论

我们还可以使用 JsonSerializerOptions 全局设置忽略属性的方式:

  • DefaultIgnoreCondition - 默认的JsonIgnoreCondition,默认值为 Never

  • IgnoreReadOnlyProperties - 忽略所有只读属性

添加微信号【MyIO666】,邀你加入技术交流群

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值