摘要: 序列化对象时,格式化器输入类型及其定义程序集的全名。反序列化一个对象时,格式化器根据这个信息类准确的判断要为对象构造并初始化什么类型。前面,我们讨论了如何利用IserializationSurrogate接口接管一个特定的类型的序列化和反序列化。实现了IserializationSurrogate接... 阅读全文
posted @ 2015-07-05 16:53 -祐扌戒恉- 阅读(751) 评论(0) 推荐(0) 编辑
摘要: 前面讨论了如何修改一个类型的实现,控制该类型如何对他本身的实现进行序列化和反序列化。然而,格式化器还允许不是”类型实现的一部分”的代码重写该类型序列化和反序列化器对象的方式。应用程序之所以要重写类型的的行为,主要是基于两个方面的考虑。1、 允许开发人员序列化最初没有设计成要序列化的一个类型。2、 允... 阅读全文
posted @ 2015-07-05 16:52 -祐扌戒恉- 阅读(553) 评论(0) 推荐(1) 编辑
摘要: .NET Framework的序列化架构相当全面,本节要讨论如何设计一个类型,本节要讨论如何设计一个类型,它能将自己的序列化或反序列化成一个不同的类型或对象。下面列举一些有趣的例子。1、 有的类型(比如System.DBNull和System.Reflection.Missing)设计成每个AppD... 阅读全文
posted @ 2015-07-05 11:16 -祐扌戒恉- 阅读(841) 评论(0) 推荐(0) 编辑
摘要: 前面讲过,一组序列化好的对象可以有许多目的地:同一个进程、同一台机器不同进程、不同机器上的不同进程等。在一些比较少见的情况下,一个对象可能想知道它要在什么地方反序列化,从而已不同的方式生成它的状态。例如,对一个包装了Windows信号量对象的一个对象,如果它知道要反序列化到同一个进程中,就可能决定序... 阅读全文
posted @ 2015-07-05 10:41 -祐扌戒恉- 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 本章前面讨论过,控制序列化和反序列化过程的最佳方式就是使用OnSerializing、OnSerialized、OnDeserializing、OnDeserialized、NonSerialized、OptionalField等attribute。然而,在一些极少见的情况下,这些attribute... 阅读全文
posted @ 2015-07-05 10:16 -祐扌戒恉- 阅读(675) 评论(0) 推荐(0) 编辑
摘要: 本节要深入讨论一下格式化器如何序列化对象的字段。掌握了这些知识后,可以更容易地理解本章后面要解释的一些更高级的序列化和反序列化技术。为了简化格式化器的操作,FCL在System.Runtime.Serialization命名空间提供了一个FormatterServices类型。该类型只包含静态方法,... 阅读全文
posted @ 2015-07-04 22:54 -祐扌戒恉- 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 使用SerializableAttribute这个定制attribute应用于一个类型时,所有实例字段都会被序列化。然而,类型可能定义了一些不应序列化的实例字段。一般情况下,有两个原因促使我们不想对类型的部分实例字段进行序列化。字段含有反序列化变得无效的信息。例如,假定一个对象包含到一个Window... 阅读全文
posted @ 2015-07-04 20:36 -祐扌戒恉- 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 设计一个类型时,设计人员必须郑重地决定是否允许类型的实例序列化。类型默认是不可序列化的。例如,以下代码可能不会像你希望的那样工作:internal struct Point { public Int32 x, y;}private static void OptInSerialization() ... 阅读全文
posted @ 2015-07-04 19:53 -祐扌戒恉- 阅读(366) 评论(0) 推荐(0) 编辑
摘要: static void Main(string[] args) { var objectGraph = new List { "Jeff", "Kristin", "Aidan", "Grant" }; Stream stream = S... 阅读全文
posted @ 2015-07-04 17:14 -祐扌戒恉- 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 到目前为止,本章的重点一直放在发射机制中用于构建动态可扩展应用程序所需的那些方面,包括程序集加载、类型发现以及对象构造。为了获得较好的性能和编译时的类型安全性,应尽量避免使用发射。在动态可扩展应用程序的情况下,构造好一个对象之后,宿主代码一般要将对象转型为编译时已知的一个接口或者基类。这样一来,访问... 阅读全文
posted @ 2015-06-14 23:35 -祐扌戒恉- 阅读(294) 评论(0) 推荐(0) 编辑