摘要:1、默认情况下,类型中由 SerializableAttribute 标记的所有公共和私有字段都会进行序列化,除非该类型实现 ISerializable 接口来重写序列化进程。
2、默认的序列化进程会排除用 NonSerializedAttribute 属性标记的字段。如果可序列化类型的字段包含指针、句柄或其他某些针对于特定环境的数据结构,并且不能在不同的环境中以有意义的方式重建,则最好将 NonSerializedAttribute 属性应用于该字段。
我和同事最近在作的项目中,用了微软企业库的来处理缓存,而这个缓存又是封装在企业服务中。
要封在企业服务中的组件必须签名,同时他暴露的输入输出参数必须被序列化。我们就是没留意到标志序列化默认也会把私有字段进行序列化。而产生下面的异常。
程序集“Microsoft.Practices.EnterpriseLibrary.Caching, Version=2.0.0.0, Culture=neutral, PublicKeyToken=.....”中的类型“Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager”未标记为可序列化。
不过,如果发生了跨组件类暴露,比如企业服务A组件项目中暴露了B组件项目的一个公共类C。而C类中又有一个私有类实例D,而D类被定义成internal的。则这个企业服务组件项目不会自动序列化D类。但是如果D类被定义成public的,则会自动序列化D类。...[
阅读全文]