在.Net中通过序列化和反序列化实现对象实例化
2007-10-17 19:45
549 查看
来源:khler的专栏 - CSDNBlog
有时,您会发现需要保存组件的状态。例如,可以这样做以保存有关组件用户的个人信息,或者更改自定义控件的默认配置。
可以通过一个称为“序列化”的过程将组件的状态保存到文件中。序列化允许将对象转换成数据流,然后可以将数据流保存到文件中。数据流可以通过反序列化再转换成对象。
.NET Framework 为序列化提供了两个格式化程序:BinaryFormatter 类和 SoapFormatter 类。这些类通过通常在内存中的“对象图”(对象在内存中的表示形式)并将其转换成数据流。正如它们各自的名称所表示的,BinaryFormatter 将对象图转换成二进制流(对桌面应用程序最有用),而 SOAPFormatter 将对象图转换成简单对象访问协议 (SOAP) 格式(对 Internet 应用程序最有用)。这些流然后保存为文件,在需要时可以反序列化和转换回对象。
序列化流
保存组件状态
对要序列化的组件应用 SerializableAttribute 特性。
[Serializable()]public class Account{ // ' Insert code to implement class.}
创建该类的一个实例作为要保存的对象。
Account myAccount = new Account();
创建一个 Stream 对象作为将为序列化数据提供储存库的文件。
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 文件中有一个以二进制格式保存的对象实例。
反序列化流
保存了对象后,有时需要检索它。可以用序列化组件时使用的同一格式化程序来反序列化组件。
还原保存的组件
将同一类型的某个变量声明为要还原的类。
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();
安全说明 不应使用此技术来存储任何敏感数据或保密数据,因为这不是确保数据安全的可接受方式。有关为数据创建安全加密方案的信息,请参见 System.Security.Cryptography 命名空间。
有时,您会发现需要保存组件的状态。例如,可以这样做以保存有关组件用户的个人信息,或者更改自定义控件的默认配置。
可以通过一个称为“序列化”的过程将组件的状态保存到文件中。序列化允许将对象转换成数据流,然后可以将数据流保存到文件中。数据流可以通过反序列化再转换成对象。
.NET Framework 为序列化提供了两个格式化程序:BinaryFormatter 类和 SoapFormatter 类。这些类通过通常在内存中的“对象图”(对象在内存中的表示形式)并将其转换成数据流。正如它们各自的名称所表示的,BinaryFormatter 将对象图转换成二进制流(对桌面应用程序最有用),而 SOAPFormatter 将对象图转换成简单对象访问协议 (SOAP) 格式(对 Internet 应用程序最有用)。这些流然后保存为文件,在需要时可以反序列化和转换回对象。
序列化流
保存组件状态
对要序列化的组件应用 SerializableAttribute 特性。
[Serializable()]public class Account{ // ' Insert code to implement class.}
创建该类的一个实例作为要保存的对象。
Account myAccount = new Account();
创建一个 Stream 对象作为将为序列化数据提供储存库的文件。
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 文件中有一个以二进制格式保存的对象实例。
反序列化流
保存了对象后,有时需要检索它。可以用序列化组件时使用的同一格式化程序来反序列化组件。
还原保存的组件
将同一类型的某个变量声明为要还原的类。
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();
安全说明 不应使用此技术来存储任何敏感数据或保密数据,因为这不是确保数据安全的可接受方式。有关为数据创建安全加密方案的信息,请参见 System.Security.Cryptography 命名空间。
相关文章推荐
- 通过序列化和反序列化实现对象实例化
- 通过序列化和反序列化实现对象实例化
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
- 通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法
- Android中通过Serializable实现对象序列化和反序列化
- 今天无意中发现JavaBean类基本都要求实现了Serializable接口,以前只是知道序列化以后,可以通过io流的方式将对象序列化和反序列化,进行存取,但不知道为什么需要序列化,今天总结一下
- 通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法
- .NET对象的XML序列化和反序列化实例详解
- 对象的序列化和反序列化及其实现和使用
- .NET对象的XML序列化和反序列化
- 在.NET中实现对象序列化(转)
- Windows CE /SmartDeviceProject 操作Json数据实现对象序列化和反序列化
- .NET对象的XML序列化和反序列化
- .NET对象的XML序列化和反序列化
- 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
- c#实现对象的xml格式序列化及反序列化
- 【转】.NET对象的XML序列化和反序列化
- .NET中使用Protobuffer 实现序列化和反序列化
- JAVA单例模式深入,序列化以及反序列化获取对象实例
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现