当前位置:网站首页>有条件地 [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】,邀你加入技术交流群
边栏推荐
- Princeton University, Peking University & UIUC | offline reinforcement learning with realizability and single strategy concentration
- 暑期刷题-Day3
- [rust notes] 18 macro
- Tidb ecological tools (backup, migration, import / export) collation
- [slam] lidar camera external parameter calibration (Hong Kong University marslab) does not need a QR code calibration board
- [padding] an error is reported in the prediction after loading the model weight attributeerror: 'model' object has no attribute '_ place‘
- mysqldump数据备份
- Containerization Foundation
- Safety science to | travel, you must read a guide
- 【RISC-V】外部中断
猜你喜欢

SAP ALV单元格级别设置颜色

3.1 detailed explanation of rtthread serial port device (V1)

Blue Bridge Cup - Castle formula

BUAA magpie nesting

Cubemx transplantation punctual atom LCD display routine

2.13 weekly report

Image super-resolution using deep convolutional networks(SRCNN)解读与实现

Pointer written test questions ~ approaching Dachang

2.2 STM32 GPIO operation
![[Massey] Massey font format and typesetting requirements](/img/27/6b641551d6d8699683972f40f3b8e5.jpg)
[Massey] Massey font format and typesetting requirements
随机推荐
Image super resolution using deep revolutionary networks (srcnn) interpretation and Implementation
User perceived monitoring experience
Edcircles: a real time circle detector with a false detection control translation
简述C语言中的符号和链接库
Failure causes and optimization methods of LTE CSFB
Microkernel structure understanding
How do we make money in agriculture, rural areas and farmers? 100% for reference
2.1 rtthread pin设备详解
Crazy, thousands of netizens are exploding the company's salary
February 14, 2022 Daily: Google long article summarizes the experience of building four generations of TPU
1、工程新建
Flask learning and project practice 9: WTF form verification
Getting started with applet cloud development - getting user search content
Pelosi: Congress will soon have legislation against members' stock speculation
施努卡:3d视觉检测应用行业 机器视觉3d检测
1.16 - 校验码
On Data Mining
[Qt5] QT QWidget immediately appears and disappears
[optimization model] Monte Carlo method of optimization calculation
JS music online playback plug-in vsplayaudio js