- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DotNet序列化和反序列化
序列化就是将我们程序中的对象通过字节流写入存储媒体或网络流中。反序列化就是把已存入的媒体或接收的网络流中的内容转换成程序运行中的对象。这两个过程结合起来,可以轻松地存储和传输数据。
使用序列化场景:??? 1、在用户登录后,对界面作一些个性化设置(如:背景色、布局、字体等),为了使用户关闭网页后能够保留设置,以便在下次登录时再加载上次的设置。我们可以将用户的设置信息保存在一个对象中,然后把该对象序列化保存在表的某个字段中,在加载网页的时候取出字段中的信息,并反序列化生成设置对象,应用到用户界面上。??? 2、对用户的一些不用作查询的信息(如:住址、Email、家庭成员、工作经历等)序列化后保存在一个表的字段中,在需求发生变化时(如增加用户新的信息),不用动态增加字段。在需要使用的时候,取出字段中的的信息反序列化成对象就可以了。??? 3、在点对点两人聊天系统中,一个用户输入的内容(如:彩色文字、图片等)后显示输入时的内容和样式,另一个用户界面中也应当显示同样的内容和样式。这时我们可以把用户输入的内容(如:彩色文字、图片等)封装为一个对象,然后序列化到二进制网络流中去,在另一端,取出二进制流并反序列化成对象,然后显示在界面上。.NET Framework 提供两种序列化技术:????二进制序列化????XML序列化??? 二进制序列化的保真度非常强,可以把私有成员变量序列化到流中去。XML序列化只可以把公有成员变量序列化到流中去,私有成员变量无法被序列化,但如果私有成员变量有对应的公有属性的话,那私有成员变量照样可以被序列化。
要使某个类的对象可以被序列化,必须要在类的前面加上 [Serializable]属性,否则会产生异常。如果要对子类进行序列化,那必须要保证其父类也具有[Serializable]属性。如果有类中有一个成员变量是个对象,那也要保证该成员对象的类具有[Serializable]属性,否则也会抛出异常。
二进制序列化??? 二进制序列化是通过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类??? 1、XmlSerializer类序列化对象的时候,[Serializable]和[NonSerializable]属性是不起作用的,可以使用XmlIgnore属性,替代NonSerializable属性。??? 2、XmlSerializer类序列化对象的时候,不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者提供合适的公共属性。??? 使用XmlSerializer类对上面Student类的对象进行XML序列化:??????????? FileStream fs = new FileStream(c:\\aaa.xml, FileMode.OpenOrCreate);??????????? Student s = new Student();?????????
文档评论(0)