序列化(待续)

为什么需要序列化(序列化的两种用途)

把对象的字节序列永久保存的硬盘上,通常存放的文件中

我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁 盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。公共语言运行时 (CLR) 管理对象在内存中的分布,.NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。对象通常用成员变量来存储对其他实例的引用。类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次。.NET 框架所提供的序列化体系结构可以自动正确处理对象图表和循环引用。对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 Serializable(请参阅基 本序列化)。否则,当序列化程序试图序列化未标记的对象时将会出现异常。当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值。

在网上传输对象的字节序列

           当两个进程进行远程通信时,彼此可以发送各种数据类型的数据。包括文本,图片,音频,视频等都会以二进制序列的形式在网络上传送。

           对象也是如是如此,发送方把程序中的对象转换为字节序列,发送给接收方。接收方在接收发送来的字节序列并把它恢复为对象。

序列化与反序列化的定义

从上面的对象传输过程我们可以得到序列化和反序列化的定义

序列化:把程序中的对象转换成字节序列的过程就叫做对象的序列化。

反序列化:把字节序列恢复成对象的过程就叫做反序列化。

.NET框架下的三种序列化方式:XML Serialize、SOAP Serialize、Binary Serialize

XML Serialize

将数据流格式化为XML存储。

这个是 ASP。NET 中 Web Service SOAP 请求的发送和接受默认使用的方式。指序列化对象的公共属性和成员。

xml Serializer 这种方式简单易用,用于程序内部使用,灵活方便。但它对有些类型不能够序列化,如hashtable。

使用xml Serializer, 不需要使用特性[Serializable]
SOAP Serialize

和第二种差不多也是XML的格式存储,只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。

跨平台性

Binary Serialize

提供了一个简单的二进制数据流以及某些附加的类型信息。

与XML序列化不同的是,二进制序列化可以将类的实例中所有字段(包括私有和公有)都进行序列化操作。这就更方便、更准确的还原了对象的副本。

不想被序列化?

如果某个类的元素不想被序列化,XML Serialize、 SOAP Serialize可以使用[NonSerialized]属性来标志,XML Serialize、可以使用[XmlIgnore]来标志。

如何序列化和反序列化

要实现对象的序列化,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。

对一个类序列化的简单方法就是在类的前面添加[Serializable]属性

 

 

 

 

 

 

 

 

 

如果本文引用了你的文章而未注明,请及时联系我。
原文地址:https://www.cnblogs.com/sunxi/p/2730006.html