用户名: 密码: 验证码:           网站地图 高级搜索 RSS订阅 收藏本站
Google
您的位置:首页>>网络编程>>.Net编程>>阅读资讯:在.Net中通过序列化和反序列化实现对象实例化

在.Net中通过序列化和反序列化实现对象实例化

[ 来源:CSDN | 阅读:次 | 更新日期:2007-10-18 00:38:31 | 评论 0 条 | 我要投稿 ]
  有时,您会发现需要保存组件的状态。例如,可以这样做以保存有关组件用户的个人信息,或者更改自定义控件的默认配置。

  可以通过一个称为“序列化”的过程将组件的状态保存到文件中。序列化允许将对象转换成数据流,然后可以将数据流保存到文件中。数据流可以通过反序列化再转换成对象。

  .NET Framework 为序列化提供了两个格式化程序:BinaryFormatter 类和 SoapFormatter 类。这些类通过通常在内存中的“对象图”(对象在内存中的表示形式)并将其转换成数据流。正如它们各自的名称所表示的,BinaryFormatter 将对象图转换成二进制流(对桌面应用程序最有用),而 SOAPFormatter 将对象图转换成简单对象访问协议 (SOAP) 格式(对 Internet 应用程序最有用)。这些流然后保存为文件,在需要时可以反序列化和转换回对象。

  序列化流
  保存组件状态

  对要序列化的组件应用 SerializableAttribute 特性。
[Serializable()]public class Account{ // ' Insert code to implement class.}
创建该类的一个实例作为要保存的对象。
Account myAccount = new Account();
创建一个 Stream 对象作为将为序列化数据提供储存库的文件。

www.yueluo.net


using System.IO; // This creates a new file with the name SavedAccount.txt, and creates // a Stream object to write data to that file. The GetFolderPath method // is used to get the path to the current user's Personal folder.Stream myFileStream = File.Create (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal));
创建一个格式化程序类实例。
  如果要将对象图转换成二进制流,创建一个 BinaryFormatter 类实例。
using System.Runtime.Serialization.Formatters.Binary; BinaryFormatter serializer = new BinaryFormatter();
如果要将对象图转换成 SOAP 流,创建一个 SoapFormatter 类实例。
注意 项目中必须有对 System.Runtime.Serialization.Formatters.Soap 命名空间的引用。
using System.Runtime.Serialization.Formatters.Soap; SoapFormatter serializer = new SoapFormatter();
调用格式化程序的 Serialize 方法,将对象写入 Stream。
serializer.Serialize(myFileStream, myAccount); myFileStream.Close();
关闭文件流以完成序列化。
现在 SavedAccount.txt 文件中有一个以二进制格式保存的对象实例。 字串9

  反序列化流
  保存了对象后,有时需要检索它。可以用序列化组件时使用的同一格式化程序来反序列化组件。

  还原保存的组件

  将同一类型的某个变量声明为要还原的类。
Account restoredAccount;
创建一个 Stream 对象并打开包含序列化对象的文件。
using System.IO; Stream myFileStream = File.OpenRead (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal));
创建一个与序列化数据时使用的格式化程序类具有相同类型的实例。
下面的示例显示如何使用 BinaryFormatter 类。
using System.Runtime.Serialization.Formatters.Binary; BinaryFormatter deserializer = new BinaryFormatter();
下面的示例显示如何使用 SoapFormatter 类。
注意 项目中必须已有对 System.Runtime.Serialization.Formatters.Soap 命名空间的引用。
using System.Runtime.Serialization.Formatters.Soap; SoapFormatter deserializer = new SoapFormatter();
调用格式化程序的 Deserialize 方法将文件流转换成一个对象图,并通过显式类型转换将该对象图转换成所需类型的对象。
// The explicit cast converts the file stream to an object of the type // specified. If the object in the file stream cannot be converted to // the specified type, an error will result.restoredAccount = (Account)(deserializer.Deserialize(myFileStream)); myFileStream.Close();
yueluo.net

安全说明 不应使用此技术来存储任何敏感数据或保密数据,因为这不是确保数据安全的可接受方式。有关为数据创建安全加密方案的信息,请参见 System.Security.Cryptography 命名空间。
Tags:.Net,序列化,反序列化,对象实例化
责任编辑:忧郁王子
您的评论
用户名:新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为