DotNet序列化和反序列化.doc_第1页
DotNet序列化和反序列化.doc_第2页
DotNet序列化和反序列化.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

序列化就是将我们程序中的对象通过字节流写入存储媒体或网络流中。反序列化就是把已存入的媒体或接收的网络流中的内容转换成程序运行中的对象。这两个过程结合起来,可以轻松地存储和传输数据。使用序列化场景: 1、在用户登录后,对界面作一些个性化设置(如:背景色、布局、字体等),为了使用户关闭网页后能够保留设置,以便在下次登录时再加载上次的设置。我们可以将用户的设置信息保存在一个对象中,然后把该对象序列化保存在表的某个字段中,在加载网页的时候取出字段中的信息,并反序列化生成设置对象,应用到用户界面上。 2、对用户的一些不用作查询的信息(如:住址、Email、家庭成员、工作经历等)序列化后保存在一个表的字段中,在需求发生变化时(如增加用户新的信息),不用动态增加字段。在需要使用的时候,取出字段中的的信息反序列化成对象就可以了。 3、在点对点两人聊天系统中,一个用户输入的内容(如:彩色文字、图片等)后显示输入时的内容和样式,另一个用户界面中也应当显示同样的内容和样式。这时我们可以把用户输入的内容(如:彩色文字、图片等)封装为一个对象,然后序列化到二进制网络流中去,在另一端,取出二进制流并反序列化成对象,然后显示在界面上。.NET Framework 提供两种序列化技术:二进制序列化XML序列化 二进制序列化的保真度非常强,可以把私有成员变量序列化到流中去。XML序列化只可以把公有成员变量序列化到流中去,私有成员变量无法被序列化,但如果私有成员变量有对应的公有属性的话,那私有成员变量照样可以被序列化。要使某个类的对象可以被序列化,必须要在类的前面加上 Serializable属性,否则会产生异常。如果要对子类进行序列化,那必须要保证其父类也具有Serializable属性。如果有类中有一个成员变量是个对象,那也要保证该成员对象的类具有Serializable属性,否则也会抛出异常。二进制序列化(using System.Runtime.Serialization.Formatters.Binary) 二进制序列化是通过BinaryFormatter对象实现的,BinaryFormatter对象有两个方法: void Serialize(Stream s,Object o) 将对象o序列化到流s中去。 object Deserialize(Stream s) 从流s中读取数据反序列化成对象。 对上面Student类的对象进行二进制序列化: FileStream fs = new FileStream(c:aaa.dat, FileMode.OpenOrCreate); Student s = new Student(); s.Name = 张三; s.Age = 18; s.School = 华育; BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, s); fs.Close(); Console.WriteLine(OK); 反序列化代码 FileStream fs = new FileStream(c:aaa.dat, FileMode.OpenOrCreate); BinaryFormatter bf = new BinaryFormatter(); Student s = (Student)bf.Deserialize(fs); fs.Close(); s.speak();XmlSerializer类(using System.Xml.Serialzaion) 1、XmlSerializer类序列化对象的时候,Serializable和NonSerializable属性是不起作用的,可以使用XmlIgnore属性,替代NonSerializable属性。 2、XmlSerializer类序列化对象的时候,不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者提供合适的公共属性。 使用XmlSerializer类对上面Student类的对象进行XML序列化: FileStream fs = new FileStream(c:aaa.xml, FileMode.OpenOrCreate); Student s = new Student(); s.Name = 张三; s.Age = 18; s.School = 华育; XmlSerializer xs = new XmlSerializer(typeof(Student); xs.Serialize(fs, s); fs.Close(); Console.WriteLine(OK); 使用XmlSerializer类反序列化 FileStream fs = new FileStream(c:aaa.xml,FileMode.OpenOrCreate); XmlSerializer xml = new XmlSerializer(typeof(Student); Student s = (Student)xml.Deserialize(fs); fs.Close(); s.speak(); 选择性序列化 类通常包含不应被序列化的字段。可以通过使用 NonSerialized 属性标记成员变量来防止它们被序列化,如下所示: Serializable public class MyObject publ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论