zoukankan      html  css  js  c++  java
  • Version Tolerant Serialization

    Let's Start it By a sample of code.

    // Version 1 of the Address class.
    [Serializable]
    public class Address
    {
        public string Street;
        public string City;
    }
    // Version 2.0 of the Address class.
    [Serializable]
    public class Address
    {
        public string Street;
        public string City;
        // The older application ignores this data.
        public string CountryField;
    }

    Fields can be marked as optional by applying the OptionalFieldAttribute attribute to them. During deserialization, if the optional data is missing, the serialization engine ignores the absence and does not throw an exception. Thus, applications that expect older versions of a type can send data to applications that expect newer versions of the same type.

    The following example shows version 2.0 of the Address class with the CountryField field marked as optional. If an older application sends version 1 to a newer application that expects version 2.0, the absence of the data is ignored.

    [Serializable]
    public class Address
    {
        public string Street;
        public string City;
    
        [OptionalField]
        public string CountryField;
    }

    Serialization callbacks are a mechanism that provides hooks into the serialization/deserialization process at four points.

     
    AttributeWhen the Associated Method is CalledTypical Use

    OnDeserializingAttribute

    Before deserialization.*

    Initialize default values for optional fields.

    OnDeserializedAttribute

    After deserialization.

    Fix optional field values based on contents of other fields.

    OnSerializingAttribute

    Before serialization.

    Prepare for serialization. For example, create optional data structures.

    OnSerializedAttribute

    After serialization.

    Log serialization events.

    * This callback is invoked before the deserialization constructor, if one is present.

    [Serializable]
    public class Address
    {
        public string Street;
        public string City;
        [OptionalField]
        public string CountryField;
    
        [OnDeserializing]
        private void SetCountryRegionDefault (StreamingContext sc)
        {
            CountryField = "Japan";
        }
    }
  • 相关阅读:
    typedef 函数指针的使用(含例子)
    关于计算机与MCU通信及MAX232、CH340T与PL2303的区别
    CH340电路设计
    USB转串口CH340接线方法
    开漏输出、推挽输出的区别
    STM32位带操作
    STM32启动文件:startup_stm32f10x_hd.s等启动文件的简单描述
    浮点数在内存中的存储方式
    stm32启动地址
    STM32三种启动模式 boot0 boot1
  • 原文地址:https://www.cnblogs.com/malaikuangren/p/2575476.html
Copyright © 2011-2022 走看看