加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:22:02 所属栏目:百科 来源:网络整理
导读:Json.Net支持序列化回调方法,回调方法通过Json序列化器(JsonSerializer)可以用来操作一个对象,在它被序列化和反序列化之前或者之后. 为了告诉序列化器在对象的序列化生命周期中哪个方法应该被调用,需要用适当的attribute( OnSerializingAttribute , OnSer

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=

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

temp = This value was reset after serialization.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读