当前位置:网站首页>有条件地 [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】,邀你加入技术交流群
边栏推荐
- [practical exercise] face location model based on skin color
- Introduction to DeNO
- js凡客banner轮播图js特效
- [Qt5] QT QWidget immediately appears and disappears
- SAP ALV单元格级别设置颜色
- How to write compile scripts compatible with arm and x86 (Makefile, cmakelists.txt, shell script)
- mysql从一个连续时间段的表中读取缺少数据
- Flask learning and project practice 8: introduction and use of cookies and sessions
- 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
- [American competition] mathematical terms
猜你喜欢
Princeton University, Peking University & UIUC | offline reinforcement learning with realizability and single strategy concentration
遥感图像超分辨重建综述
Crazy, thousands of netizens are exploding the company's salary
canvas切积木小游戏代码
SAP ALV color code corresponding color (finishing)
2.1 rtthread pin设备详解
Factors affecting user perception
Precautions for single chip microcomputer anti reverse connection circuit
Tidb ecological tools (backup, migration, import / export) collation
Quartz misfire missed and compensated execution
随机推荐
[analysis of variance] single factor analysis and multi factor analysis
Getting started with applet cloud development - getting user search content
Tidb ecological tools (backup, migration, import / export) collation
简述C语言中的符号和链接库
2.2 STM32 GPIO操作
暑期刷题-Day3
Blue Bridge Cup - day of week
SAP ALV单元格级别设置颜色
Explore pointers and pointer types in depth
Pytoch foundation - (2) mathematical operation of tensor
C language circular statement
Remote Sensing Image Super-resolution and Object Detection: Benchmark and State of the Art
Edcircles: a real time circle detector with a false detection control translation
Quartz misfire missed and compensated execution
自动化测试怎么规范部署?
Microkernel structure understanding
Shell pass parameters
3.2 detailed explanation of rtthread serial port device (V2)
RT-Thread--Lwip之FTP(2)
Blue style mall website footer code