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.

  • 相关阅读:
    font-weight 导致iconfont显示有问题和糊
    compositionstart与compositionend解决组合文字输入问题
    工具函数 createOnceHandler 只执行一次的事件绑定
    redis的基本数据类型
    dubbo服务的发布和调用
    Dubbo介绍和服务架构分析
    spring的事务配置方法
    [已解决] java.net.ConnectException: Connection refused: no further information
    [已解决] 点击 【Show in system explorer】Eclipse卡死,未响应
    [已解决] java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.com.yourproject.test_jsp
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2251123.html
Copyright © 2011-2022 走看看