网站教育机构排行前十名,枣强网站建设公司,网站怎么做文本跳出来,建设网点是什么意思Serialization是.NET中一种实现对象持久性#xff08;Persistent#xff09;的机制。它是一个将对象中的数据转换成一个单一元素#xff08;通常是Stream#xff09;的过程。它的逆过程是Deserialization。Serialization的核心概念是将一个对象的所有数据看作一个独立的… Serialization是.NET中一种实现对象持久性Persistent的机制。它是一个将对象中的数据转换成一个单一元素通常是Stream的过程。它的逆过程是Deserialization。Serialization的核心概念是将一个对象的所有数据看作一个独立的单元。 一般说来在两种情况下非常需要Serialization1当我们希望能够将对象当前的状态完整地保存到存储介质中以便我们以后能够精确地还原对象时2当我们希望将对象从一个应用程序空间Application domain传递到另一个应用程序空间时。例如Windows Form程序就是利用Serialization机制来实现剪贴板的copy paste的。 .NET Framework支持两种类型的SerializationShallow Serialization和Deep Serialization。 所谓Shallow Serialization是将对象的可读写read-write属性的值转换成字节流而对象内部的数据没有通过read-write属性暴露出来的数据则不被转换。XmlSerializer以及Web Services就使用这种技术。 Deep Serialization比Shallow Serialization更加彻底因为它是将存储在对象私有变量里的实际值拷贝到字节流里。而且Deep Serialization还将serialize整个object graph。也就是说如果你的对象持有其他对象的引用或者其他对象引用的集合那么所有这些对象都将被Serialize。BinaryFormatter和SoapFormatter以及.NET Remoting都使用Deep Serialization技术它甚至被有限地用于LosFormatter来产生存储在Web Form页中的状态数据。 本文将着重于Deep Serialization。 Serialization的过程 .NET Framework通过Reflection提供自动Serialization的机制。当一个对象被序列化Serialized的时候它的类名Assembly以及类实例的所有数据成员都将被写入存储介质中。Serialization引擎保持对所有已经被序列化的对象引用的追踪以确保相同的对象引用最多只被序列化一次。 通常一个Serialization过程会由formatter例如BinaryFormatter的Serialize方法引发。对象的Serialization过程按照以下规则进行 1、 检测以确保formatter是否拥有一个代理选择器surrogate selector。如果有检查代理选择器是否持有给定的对象类型。如果有ISerializable.GetObjectData被调用。 2、 如果formatter没有代理选择器或者代理选择器没有对象类型检查对象是否被用Serializable属性标记。如果没有则抛出SerializationException异常。 3、 如果对象被标记为Serializable检查对象是否实现了ISerializable接口。如果实现了此接口则GetObjectData被调用。 4、 如果对象没有实现ISerializable接口则使用默认的序列化策略来序列化没有用NonSerialized属性标记的域。