.NET 6新特性试用之System.Text.Json功能改进

2022-04-17 13:37:22
目录
前言:Demo​1.属性排序​​2.序列化通知​结论:

前言:

​​System.Text.json​​作为.NET默认的JSON序列化和反序列化类库,让我们看看,在.NET 6中有哪些功能上的改进?

Demo

​1.属性排序​

在属性上声明​​JsonPropertyOrderAttribute​​来控制属性序列化的顺序,而以前,顺序是由反射顺序决定的,是不确定的。

set; } [JsonPropertyOrder(-1)] public int Id { get; set; }}

排序值较小的数字首先被序列化;没有声明属性的默认排序值为0:

{ "Id": 1, "Age": 20www.easck.com, "Name": "My IO"}

​2.序列化通知​

​​System.Text.Json​​新增了4个接口:

IJsonOnDeserializedIJsonOnDeserializingIJsonOnSerializedIJsonOnSerializing

从名字上也可以看出它们的作用,即在序列化/反序列化前后被调用。

示例代码如下:

public class User : IJsonOnSerialized, IJsonOnDeserialized{  public void OnDeserialized() => this.Validate(); // 反序列化后调用  public void OnSerializing() => this.Validate(); // 序列化前调用  private void Validate()  {    if (this.Age <= 0)      throw new ArgumentException();  }}

结论:

​“属性排序”功能有点鸡肋,目前还没碰到过需要指定排序的应用场景。​​“序列化通知”功能对于设置默认值和验证属性值合法性非常有用。​