• 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.

  • 相关阅读:
    汇编学习笔记38
    汇编学习笔记40
    FormsAuthentication初接触感触颇多
    IE9默认下载器的选择问题! 会帮助喜欢迅雷的朋友们!
    [趣图]程序员的宿命
    英文双引号引发的杯具
    IT人去大公司还是去小公司工作?
    Sharepoint2010应用开发四:使用客户对象模型(Client Object Model)向SharePoint列表写数据
    你的实力决定了你的假期的长短(转)
    Sharepoint2010应用开发五:使用WCF操作Sharepoint列表数据
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2251123.html
Copyright © 2020-2023  润新知