• 多态的实现序列化


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

    举例来说,下面的代码,定义了三个类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)。

  • 相关阅读:
    前端笔记7
    前端笔记6
    列表、行块元素
    我的学习方法(5)
    (读后摘抄)《计算机程序设计语言的发展》_王汝传
    电影《比利·林恩的中场战事》
    关于优化(1)
    Debug技巧(1)
    奇奇怪怪的东西(1)
    我的学习方法(4)
  • 原文地址:https://www.cnblogs.com/jiangfei5945/p/3483704.html
Copyright © 2020-2023  润新知