当前位置:网站首页>有条件地 [JsonIgnore]
有条件地 [JsonIgnore]
2022-07-06 03:39:00 【dotNET跨平台】
前言
通常,在进行 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】,邀你加入技术交流群
边栏推荐
- IPv6 comprehensive experiment
- The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
- Multi project programming minimalist use case
- User perceived monitoring experience
- BUAA calculator (expression calculation - expression tree implementation)
- JS music online playback plug-in vsplayaudio js
- 【Qt5】Qt QWidget立刻出现并消失
- 数据分析——seaborn可视化(笔记自用)
- Differential GPS RTK thousand search
- LTE CSFB test analysis
猜你喜欢
MADDPG的pythorch实现——(1)OpenAI MADDPG环境配置
11. Container with the most water
【SLAM】lidar-camera外参标定(港大MarsLab)无需二维码标定板
SWC introduction
2. GPIO related operations
[slam] lidar camera external parameter calibration (Hong Kong University marslab) does not need a QR code calibration board
three. JS page background animation liquid JS special effect
Force buckle 1189 Maximum number of "balloons"
Tomb. Weekly update of Finance (February 7 - February 13)
Tidb ecological tools (backup, migration, import / export) collation
随机推荐
[rust notes] 18 macro
Pointer written test questions ~ approaching Dachang
Differential GPS RTK thousand search
Svg drag point crop image JS effect
StrError & PERROR use yyds dry inventory
出现Permission denied的解决办法(750权限谨慎使用)
[prediction model] difference method model
关于非虚函数的假派生
Overview of super-resolution reconstruction of remote sensing images
ASU & OSU | model based regularized off-line meta reinforcement learning
自动化测试怎么规范部署?
Deno介绍
【RISC-V】外部中断
Crawler of explanation and application of agency theory
JS music online playback plug-in vsplayaudio js
Microkernel structure understanding
Introduction to DeNO
Quartz misfire missed and compensated execution
The solution of permission denied (750 permissions should be used with caution)
SAP ALV单元格级别设置颜色