zoukankan      html  css  js  c++  java
  • Json.Net学习笔记(八) 序列化的回调方法

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


    OnSerializing 
    OnSerialized 
    OnDeserializing 
    OnDeserialized

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

    例如对象序列化的回调方法:

    using Newtonsoft.Json;
    using System.Runtime.Serialization;

     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);
                Console.WriteLine(json);

                //{
                //  "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.

  • 相关阅读:
    Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令
    解决软件启动报error while loading shared libraries: libgd.so.2: cannot open shared object错误
    SSH远程登录和端口转发详解
    《PHP内核探索系列文章》系列分享专栏
    如何防止网页被植入广告,内容被监控-HTTPS
    深入分析PHP优化及注意事项
    php模拟登陆的两种实现方法分析
    PHP中实现MySQL嵌套事务的两种解决方案
    php+Mysqli利用事务处理转账问题实例
    Yaf零基础学习总结5-Yaf类的自动加载
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2251123.html
Copyright © 2011-2022 走看看