多态的实现序列化
来源:互联网 发布:黄药师软件视频 编辑:程序博客网 时间:2024/06/15 04:14
转载: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)。
0 0
- 多态的实现序列化
- 序列化的实现
- 单例类的序列化实现
- java序列化的实现
- 序列化的简单实现
- Java序列化以及java序列化的实现
- 什么是java序列化,怎样实现java的序列化?
- MFC的串行序列化的实现
- 黑马程序员-面向对象多态的实现及对象序列与反序列化
- JAVA是如何实现序列化的?
- 自定义序列化 ISerializable 的实现
- MFC序列化技术的实现
- 实现对象的序列化到本地文件
- 一个简单的序列化实现
- JAVA类实现序列化的方法
- 使用序列化实现对象的拷贝
- 使用序列化实现对象的拷贝
- 序列化实现对象的拷贝
- GIT学习笔记
- Best time to go to see Dubai
- iOS应用性能调优的25个建议和技巧(20)
- Clonezilla的PXE安装实验笔记
- SecureCRT 绝佳配色方案, 保护你的眼睛
- 多态的实现序列化
- 【git】Permission denied (publickey). fatal: Could not read from remote repository.解决方案
- Django model字段类型清单
- kvm虚拟化学习笔记(十)之kvm虚拟机快照备份
- Centos 6.3上安装配置KVM
- 自定义django的admin后台action
- 载入图像并且显示
- jsp中常用操作字符串的el表达式
- 给featureLayer或者Graphic增加鼠标点击事件