- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.NET序列化的概念:
“序列化”可被定义为将对象的状态存储到存储媒介中的过程。在此过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流。在以后“反序列化”该对象时,创建原始对象的精确副本。
一、.NET序列化和反序列化的必要性
1、将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本;
2、通过值将对象从一个应用程序域发送到另一个应用程序域中。
例如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。
二、如何实现.NET序列化和反序列化
1、要实现对象的序列化,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。实现一个类可序列化的最简便的方法就是增加Serializable属性标记类。如:
1. [Serializable()] ?
2. public?class?MEABlock ?
3. { ?
4. private?int?m_ID; ?
5. public?string?Caption; ?
6. ?
7. public?MEABlock() ?
8. { ?
9. ///构造函数 ?
10. } ?
11. } ?
即可实现该类的可序列化。
2、要将该类的实例序列化为到文件中?.NET FrameWork提供了两种方法:
(1)XML序列化
使用 XmLserializer 类,可将下列项序列化。
◆公共类的公共读/写属性和字段
◆实现 ICollection 或 IEnumerable 的类。(注意只有集合会被序列化,而公共属性却不会。)
◆XmlElement 对象。
◆XmlNode 对象。
◆DataSet 对象。
要实现上述类的实例的序列化,可参照如下例子:
1. MEABlock?myBlock?=?new?MEABlock(); ?
2. //?Insert?code?to?set?properties?and?fields?of?the?object. ?
3. Xmlserializer?mySerializer?=?new?XmlSerializer(typeof(MEABlock)); ?
4. //?To?write?to?a?file,?create?a?StreamWriter?object. ?
5. StreamWriter?myWriter?=?new?StreamWriter(myFileName.xml); ?
6. mySerializer.Serialize(myWriter,?MEABlock);?
需要注意的是XML序列化只会将public的字段保存,对于私有字段不予于保存。生成的XML文件格式如下:
1. MEABlock ?
2. CaptionTest/Caption ?
3. /MEABlock?
对于对象的反序列化,则如下:
1. MEABlock?myBlock; ?
2. //?Constructs?an?instance?of?the?XmlSerializer?with?the?type ?
3. //?of?object?that?is?being?deserialized. ?
4. XmlSerializer?mySerializer?=?new?XmlSerializer(typeof(MEABlock)); ?
5. //?To?read?the?file,?creates?a?FileStream. ?
6. FileStream?myFileStream?=?new?FileStream(myFileName.xml,?FileMode.Open); ?
7. //?Calls?the?Deserialize?method?and?casts?to?the?object?type. ?
8. myBlock?=?(MEABlock)myserializer.Deserialize(myfileStream)?
(2)二进制序列化
与XML序列化不同的是,二进制序列化可以将类的实例中所有字段(包括私有和公有)都进行序列化操作。这就更方便、更准确的还原了对象的副本。要实现上述类的实例的序列化,可参照如下例子:
1. MEABlock?myBlock?=?new?MEABlock(); ?
2. //?Insert?code?to?set?properties?and?fields?of?the?object. ?
3. IFormatter?formatter?=?new?BinaryFormatt
文档评论(0)