zoukankan      html  css  js  c++  java
  • 多态的实现序列化

    转载:http://www.cnblogs.com/jiangfei5945/p/3483704.html


    多态的实现序列化,乍一听有点蒙,其实就是序列化的时候序列化子类,反序列化的时候能多态的反序列化出子类来。

    举例来说,下面的代码,定义了三个类ClassToSerialize是父类,ConcreteClassToSerializeA 和ConcreteClassToSerializeB 子类。

    当我们序列化是序列化ConcreteClassToSerializeA,反序列化的时候我们希望反序列化出ConcreteClassToSerializeA对象,而不是ConcreteClassToSerializeB ,更不是ClassToSerialize。

    复制代码
        [Serializable]
        [XmlInclude(typeof(ConcreteClassToSerializeA))]
        [XmlInclude(typeof(ConcreteClassToSerializeB))]
        public class ClassToSerialize
        {
            public string Name { get; set; }
            //public bool CanExecute(string name)
            //{
            //    return string.IsNullOrEmpty(name) ? false : true;
            //}
        }
    
        [Serializable]
        public class ConcreteClassToSerializeA : ClassToSerialize
        {
            public int Age { get; set; }
        }
    
        [Serializable]
        public class ConcreteClassToSerializeB : ClassToSerialize
        {
            public string Gender { get; set; }
        }
    复制代码

    要想实现上述的需求,基类上必须添加[XmlInclude(typeof(ConcreteClassToSerializeB))]这样的属性。

    复制代码
            public static void SerializeNow()
            {
                ConcreteClassToSerializeA c = new ConcreteClassToSerializeA();
                c.Name = "asdf";
                c.Age = 12;
                FileStream fileStream = new FileStream("e:\temp1.txt", FileMode.Create);
                XmlSerializer b = new XmlSerializer(typeof(ClassToSerialize));
                b.Serialize(fileStream, c);
                fileStream.Close();
            }
    
            public static void DeSerializeNow()
            {
                object c = null;
                FileStream fileStream = new FileStream("e:\temp1.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
                XmlSerializer b = new XmlSerializer(typeof(ClassToSerialize));
                c = b.Deserialize(fileStream);
                Console.WriteLine(c.ToString());
                fileStream.Close();
            }
    复制代码

    注意XmlSerializer实例化的类型都是typeof(ClassToSerialize)。


  • 相关阅读:
    python 图像处理(12):基本形态学滤波
    python 图像处理(11):基本图形的绘制
    python 图像处理(10):图像自动阈值分割
    python 图像处理(9):图像简单滤波
    python 图像处理(8):直方图与均衡化
    python 图像处理(7):对比度与亮度调整
    python 图像处理(6):图像的形变与缩放
    python 图像处理(5):图像的批量处理
    博客说明
    TestNG 添加监听器的方式
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779868.html
Copyright © 2011-2022 走看看