Json.Net学习-序列化的回调方法

前端之家收集整理的这篇文章主要介绍了Json.Net学习-序列化的回调方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Json.Net支持序列化回调方法,回调方法通过Json序列化器(JsonSerializer)可以用来操作一个对象,在它被序列化和反序列化之前或者之后.

为了告诉序列化器在对象的序列化生命周期中哪个方法应该被调用,需要用适当的attribute(OnSerializingAttribute,OnSerializedAttribute,OnDeserializingAttribute,OnDeserializedAttribute)来标记方法.

  1. public class SerializationEventTestObject
  2. {
  3. //This member is serialized and deserialized with no change.
  4. public int Member1 { get; set; }
  5.  
  6. //The value of this field is set and reset during and
  7. //after serialization.
  8. public string Member2 { get; set; }
  9.  
  10. //This field is not serialized. The OnDeserializedAttribute
  11. //is used to set the member value after serialization.
  12. [JsonIgnore]
  13. public string Member3 { get; set; }
  14.  
  15. //This field is set to null,but populated after deserialization.
  16. public string Member4 { get; set; }
  17.  
  18. public SerializationEventTestObject()
  19. {
  20. Member1 = 11;
  21. Member2 = "Hello World!";
  22. Member3 = "This is a nonserialized value";
  23. Member4 = null;
  24. }
  25.  
  26. [OnSerializing]
  27. internal void OnSerializingMethod(StreamingContext context)
  28. {
  29. Member2 = "This value went into the data file during serialization.";
  30. }
  31.  
  32. [OnSerialized]
  33. internal void OnSerializedMethod(StreamingContext context)
  34. {
  35. // Member2 = "This value was reset after serialization.";
  36. }
  37.  
  38. [OnDeserializing]
  39. internal void OnDeserializingMethod(StreamingContext context)
  40. {
  41. Member3 = "This value was set during deserialization";
  42. }
  43.  
  44. [OnDeserialized]
  45. internal void OnDeserializedMethod(StreamingContext context)
  46. {
  47. Member4 = "This value was set after deserialization.";
  48. }
  49. }
  1. SerializationEventTestObject obj = new SerializationEventTestObject();
  2. Console.WriteLine(obj.Member1);// 11
  3. Console.WriteLine(obj.Member2);// Hello World!
  4. Console.WriteLine(obj.Member3);// This is a nonserialized value
  5. Console.WriteLine(obj.Member4);// null
  6. string json = JsonConvert.SerializeObject(obj,Formatting.Indented);
  7.  
  8. string temp = obj.Member2


程序的输出结果分别为

json=

{
"Member1": 11,
"Member2": "This value went into the data file during serialization.",
"Member4": null
}

temp = This value was reset after serialization.

可见在充列化的过程中会调用带有[OnSerializing]标签方法,在序列化完成后调用[OnSerialized]方法.

猜你在找的Json相关文章