Json.Net学习-序列化的回调方法
Json.Net支持序列化回调方法,回调方法通过Json序列化器(JsonSerializer)可以用来操作一个对象,在它被序列化和反序列化之前或者之后. 为了告诉序列化器在对象的序列化生命周期中哪个方法应该被调用,需要用适当的attribute(OnSerializingAttribute,OnSerializedAttribute,OnDeserializingAttribute,OnDeserializedAttribute)来标记方法. public class SerializationEventTestObject { //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."; } } 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); string temp = obj.Member2
json= { temp = This value was reset after serialization. 可见在充列化的过程中会调用带有[OnSerializing]标签的方法,在序列化完成后调用[OnSerialized]方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |