1.序列化描述了持久化(可能包括传输)一个对象的状态到流(如文件流、内存流)的过程。被持久化的数据包括所有以后需要用来重建(反序列化)对象状态所必须的信息。
2.通过人工保存对象的每个字段数据,并且在需要的时候人工的读取每个值,重新生成一个新的对象。但是若为该类添加[Serializable]特性,该类将自动具备序列化功能。
.net序列化保存对象的幕后调用非常复杂,当一个对象被持久化到流时,所有的相关数据(基类、包含的对象等)也会被自动序列化,因此,如果想持久化一个派生类,那么继承链上的所有数据都会被包括进来。
3.可以使用其他类型将对象保存为简单对象访问协议(SOAP)或XML格式。这对于需要跨越操作系统、语言和体系结构进行传递时,这些格式非常有用。
4.为了让一个对象支持.net序列化服务,用户需要做的是为每一个关联的类或结构加上[Serializable]特性。该特性是不能被继承的。
5.不同的格式化方法对字段类型的处理
使用BinaryFormatter或SoapFormatter持久化一个对象,完全没区别。这些类型被编程为序列化一个类型的所有可序列化字段,不区分是公共字段、私有字段。可以将不想序列化的字段使用特性[NonSerialized]。
使用XmlSerializer类型,这些类型中只有字段数据的公共块或拥有公共属性的私有数据可以被序列化,其他私有数据将被忽略。并且XmlSerializer将所有公有字段/属性序列化为XML元素而不是XML特性。可以通过对字段/属性使用特性来控制。<Id>12</Id>:这种格式为元素 <MyClass .... Id = "12" Name = "aaaa">:这种格式为特性。XmlSerializer继承链每一个类需要一个默认的构造函数。如果希望对一组对象进行序列化,只需要添加这组对象到容器(如:List<T>)中并序列化对象为你选择的流就可以了。
6.BinaryFormatter类型使用紧凑的二进制格将对象图序列化为一个流
SoapFormatter类型将对象图表示为一个Soap消息(传递消息到Web服务器或从Web服务传递消息的表中XML格式)。
XmlSerializer类型将对象图序列化为一个XML文档。
7.他们都是从System.Object直接派生,不存在公共的基类。BinaryFormatter和SoapFormatter通过实现IFormatter和IRemotingFormatter接口,支持公共成员。
IFormatter定义方法Serialize()和Deserialize()方法将复杂的工作完成对象图和指定流之间的转换。
IRemotingFormatter(被.net远程处理层内部控制)重载了Serialize)和Deserialize()成员,是更适合于分布式持久化。
8.