NewtonSoft.JSON官方手册中文版【连载6】

即将推出本人原译的NewtonSoft.JSON官方手册中文版完整文档(.chm格式),敬请期待!

序列化回调函数

Json.NET支持序列化回调函数方法。在JsonSerializer序列化一个对象之前或之后、反序列化一个对象之前或之后,回调函数可以用来操作这个对象。

  • OnSerializing
  • OnSerialized
  • OnDeserializing
  • OnDeserialized

若要告诉序列化器在对象的序列化生命周期内需要调用哪种方法,只要用适当的特性(OnSerializingAttribute、OnSerializedAttribute、OnDeserializingAttribute、OnDeserializedAttribute)来布局一个方法

示例

示例对象以及序列化回调方法的:

序列化回调特性

public class SerializationEventTestObject
{
  // 2222
  // This member is serialized and deserialized with no change.
  public int Member1 { get; set; }
  // The value of this field is set and reset during and

  // after serialization.
  public string Member2 { get; set; }
  // This field is not serialized. The OnDeserializedAttribute

  // is used to set the member value after serialization.
  [JsonIgnore]
  public string Member3 { get; set; }
  // This field is set to null, but populated after deserialization.
  public string Member4 { get; set; }
  public SerializationEventTestObject()
  {
      Member1 = 11;
      Member2 = "Hello World!";
      Member3 = "This is a nonserialized value";
      Member4 = null;
  }
  [OnSerializing]
  internal void OnSerializingMethod(StreamingContext context)
  {
      Member2 = "This value went into the data file during serialization.";
  }
  [OnSerialized]
  internal void OnSerializedMethod(StreamingContext context)
  {
      Member2 = "This value was reset after serialization.";
  }
  [OnDeserializing]
  internal void OnDeserializingMethod(StreamingContext context)
  {
      Member3 = "This value was set during deserialization";
  }
  [OnDeserialized]
  internal void OnDeserializedMethod(StreamingContext context)
  {
      Member4 = "This value was set after deserialization.";
  }
}

此示例中Json.NET序列化并反序列化了对象:

序列化回调示例

SerializationEventTestObject obj = new SerializationEventTestObject();
Console.WriteLine(obj.Member1);
// 11
Console.WriteLine(obj.Member2);
// Hello World!
Console.WriteLine(obj.Member3);
// This is a nonserialized value
Console.WriteLine(obj.Member4);
// null
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
// {
//   "Member1": 11,
//   "Member2": "This value went into the data file during serialization.",
//   "Member4": null
// }
Console.WriteLine(obj.Member1);
// 11
Console.WriteLine(obj.Member2);
// This value was reset after serialization.
Console.WriteLine(obj.Member3);
// This is a nonserialized value
Console.WriteLine(obj.Member4);
// null
obj = JsonConvert.DeserializeObject<SerializationEventTestObject>(json);
Console.WriteLine(obj.Member1);
// 11
Console.WriteLine(obj.Member2);
// This value went into the data file during serialization.
Console.WriteLine(obj.Member3);
// This value was set during deserialization
Console.WriteLine(obj.Member4);
// This value was set after deserialization.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值