Json.net说法——(三)回调方法修饰标签

简介: 序列化回调方法修饰标签 json.net支持序列化回调方法标签。一个回调修饰标签可以在序列化和反序列化对象前后控制对象。   OnSerializing OnSerialized OnDeserializing OnDeserialized   通知序列化器在对象的序列化生命周期内要调用哪些方法,并用适合的标签来修饰方法(序列化时,序列化后,反序列化时,反序列化后)。

序列化回调方法修饰标签

json.net支持序列化回调方法标签。一个回调修饰标签可以在序列化和反序列化对象前后控制对象。

 

OnSerializing

OnSerialized

OnDeserializing

OnDeserialized

 

通知序列化器在对象的序列化生命周期内要调用哪些方法,并用适合的标签来修饰方法(序列化时,序列化后,反序列化时,反序列化后)。

 

参考类:Customer

public class Customer

{

//在序列化前后没有变动

public int Unid { get; set; }

 

//在序列化前后设置和重置

public string CustomerName { get; set; }

 

//设置为null,但在序列化后填充

public string Memo { get; set; }

 

//忽略序列化,OnDeserializedAttribute标签用于序列化之后设置一个值

[JsonIgnore]

public string Other { get; set; }

 

public Customer()

{

Unid = 11;

CustomerName = "宋江";

Other = "忽略序列化";

Memo = null;

}

 

[OnSerializing]

internal void OnSerializingMethod(StreamingContext context)

{

CustomerName = "在序列化时被写入数据文件";

}

 

[OnSerialized]

internal void OnSerializedMethod(StreamingContext context)

{

CustomerName = "序列化之后被赋值";

}

 

[OnDeserializing]

internal void OnDeserializingMethod(StreamingContext context)

{

Other = "反序列化时被赋值";

}

 

[OnDeserialized]

internal void OnDeserializedMethod(StreamingContext context)

{

Memo = "反序列化之后,被赋值";

}

}

 

这个.net类有4个属性:

·Unid,在序列化前后值没有变化,且值不为null

·CustomerName,在序列化前后赋值和重设值

·Memo,给null

·Other,这个属性忽略序列化。

 

public void SerializeCallbacks()

{

Customer customer = new Customer();

 

Console.WriteLine(customer.Unid);

Console.WriteLine(customer.CustomerName);

Console.WriteLine(customer.Memo);

Console.WriteLine(customer.Other);

 

/*

11

宋江

 

忽略序列化

 */

 

string json = JsonConvert.SerializeObject(customer, Formatting.Indented);

Console.WriteLine(json);

 

/*

{"Unid": 11,"CustomerName": "在序列化期间被写入数据文件", "Memo": null}

 */

 

Console.WriteLine(customer.Unid);

Console.WriteLine(customer.CustomerName);

Console.WriteLine(customer.Memo);

Console.WriteLine(customer.Other);

 

/*

 11

序列化之后被赋值

 

忽略序列化

 */

}

分析:

1)在没有序列化时的值

11

宋江

 

忽略序列化

 

输出4个属性的值,其中Memo值为null

2)序列化之后

{"Unid": 11,"CustomerName": "在序列化期间被写入数据文件", "Memo": null}

 

·Unid在序列化之前和之后没有变化

·CustomerName,在序列化之前设置为宋江,但序列化之后变成了

在序列化期间被写入数据文件[OnSerializing]

·Memonull


·Other属性被忽略

序列化之后,Customer对象的值:

11

序列化之后被赋值

 

忽略序列化

 

·Unid没有变化

·CustomerName,序列化之后,被重新设置值序列化之后被赋值 [OnSerialized]

·Other,忽略序列化,值没有变动

 

2)反序列化

接上

string json = JsonConvert.SerializeObject(customer, Formatting.Indented);

之后:

customer = JsonConvert.DeserializeObject<Customer>(strJson);

Console.WriteLine(customer.Unid);

Console.WriteLine(customer.CustomerName);

Console.WriteLine(customer.Memo);

Console.WriteLine(customer.Other);

 

/*

11

在序列化时被写入数据文件

反序列化之后,被赋值

反序列化时被赋值 */

·Unid没有变化

·CustomerName在序列化时,被赋值在序列化期间被写入数据文件写到数据文件(生成了json),即json对象中的CustomerName值为在序列化期间被写入数据文件,在反序列化之后,得到了CustomerName属性为这个值的对象

·Memo在反序列化之后被赋值为反序列化之后,被赋值 [OnDeserialized]标签

·Other属性在序列化时是被忽略的,而即使这样,因为[OnDeserializing]标签的作用,使它在反序列化时被设定值反序列化时被赋值

 

 

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
SQL 消息中间件 数据处理
DataX读取Hive Orc格式表丢失数据处理记录
DataX读取Hive Orc格式表丢失数据处理记录
576 0
|
弹性计算 自然语言处理 数据可视化
C/C++ 关于double和float两种类型的区别
C/C++ 关于double和float两种类型的区别
C/C++ 关于double和float两种类型的区别
|
SQL 分布式计算 Java
Apache Hudi与Hive集成手册
Apache Hudi与Hive集成手册
734 0
|
消息中间件 存储 负载均衡
【Kafka】Kafka 的分区分配策略分析
【4月更文挑战第7天】【Kafka】Kafka 的分区分配策略分析
|
存储 Java
Java中BigDecimal怎样取反
在上述示例中,`number.negate()`会将BigDecimal对象 `number`的值取反,并将结果存储在新的BigDecimal对象 `negated`中。
340 0
解决手机端中overflow: auto引起的内容滑动卡顿问题
解决手机端中overflow: auto引起的内容滑动卡顿问题
353 0
|
机器学习/深度学习
【MATLAB第54期】基于LSTM长短期记忆网络的多输入多输出滑动窗口回归预测模型
往期文章提到了对单列时间序列数据进行滑动窗口处理的思路,本文介绍如何对多输入多输出数据进行滑动窗口的思路。198行(代表198天),21列数据,其中前19列为变量,第20-21列为因变量。滑动窗口尺寸为7,即可认为前7天的变量作为输入,第7天的因变量作为输出。而样本数量也从原来的198变为192 ,因为前6组变量数据作为了历史样本。则输入的一组样本矩阵结构由20×1变成 20×7。往期第13期已实现多输入单输出滑动窗口回归预测。​输入数据样本 19×198。​转变后 192×19×7。
【MATLAB第54期】基于LSTM长短期记忆网络的多输入多输出滑动窗口回归预测模型
|
分布式计算 运维 Dubbo
阿里三面:CAP和BASE理论了解么?可以结合实际案例说下?
CAP 理论/定理起源于 2000 年,由加州大学伯克利分校的 Eric Brewer 教授在分布式计算原理研讨会(PODC)上提出,因此 CAP 定理又被称作 布鲁尔定理(Brewer’s theorem) 2 年后,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 发表了布鲁尔猜想的证明,CAP 理论正式成为分布式领域的定理。
|
缓存 运维 Kubernetes
CNStack 网络插件:hybridnet 的设计与实现
CNStack 网络插件:hybridnet 的设计与实现
CNStack 网络插件:hybridnet 的设计与实现