中对象序列化方法

中对象序列化方法

ID:21550108

大小:51.50 KB

页数:3页

时间:2018-10-22

中对象序列化方法_第1页
中对象序列化方法_第2页
中对象序列化方法_第3页
资源描述:

《中对象序列化方法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、中对象序列化方法摘要实现序列化最重要的两个原因是:将对象的状态保存在存储媒体中以便以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在ASP.中保存会话状态;将对象复制到yFile.bin",FileMode.Create,FileAccess.L序列化程序。将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。以下代码片段说明了如何进行此操作。IFormatterformatter=neatter

2、();Streamstream=ne("MyFile.bin",FileMode.Open,FileAccess.Read,FileShare.Read);MyObjectobj=(MyObject)formatter.Deserialize(fromStream);stream.Close();//下面是证明Console.yObjectid="ref-1"><n1>1</n1><n2>24</n2><strid="ref-3">一

3、些字符串</str></a1:MyObject></SOAP-ENV:Body></SOAP-ENV:Envelope>需要注意的是,无法继承Serializable属性。如果从MyObject派生出一个新的类,则这个新的类也必须使用该属性进行标记,否则将无法序列化。例如,如果试图序列化以下类实例,将会显示一个SerializationException,说明MyStuff类型未标记为可序列化。publicclassMyStuff:MyObject{p

4、ublicintn3;}5选择性序列化类通常包含不应被序列化的字段。例如,假设某个类用一个成员变量来存储线程ID。当此类被反序列化时,序列化此类时所存储的ID对应的线程可能不再运行,所以对这个值进行序列化没有意义。可以通过使用NonSerialized属性标记成员变量来防止它们被序列化,如下所示:[Serializable]publicclassMyObject{publicintn1;[NonSerialized]publicintn2;publicStringstr;}6自定义序列化可以通过在对

5、象上实现ISerializable接口来自定义序列化过程。这一功能在反序列化后成员变量的值失效时尤其有用,但是需要为变量提供值以重建对象的完整状态。要实现ISerializable,需要实现GetObjectData方法以及一个特殊的构造函数,在反序列化对象时要用到此构造函数。以下代码示例说明了如何在前一部分中提到的MyObject类上实现ISerializable接口。[Serializable]publicclassMyObject:ISerializable{publicintn1;publi

6、cintn2;publicStringstr;publicMyObject(){}protectedMyObject(SerializationInfoinfo,StreamingContextcontext){n1=info.GetInt32("i");n2=info.GetInt32("j");str=info.GetString("k");}publicvirtualvoidGetObjectData(SerializationInfoinfo,StreamingContextcontext)

7、{info.AddValue("i",n1);info.AddValue("j",n2);info.AddValue("k",str);}}在序列化过程中调用GetObjectData时,需要填充方法调用中提供的SerializationInfo对象。只需按名称/值对的形式添加将要序列化的变量。其名称可以是任何文本。只要已序列化的数据足以在反序列化过程中还原对象,便可以自由选择添加至SerializationInfo的成员变量。如果基对象实现了ISerializable,则派生类应调用其基对象的Ge

8、tObjectData方法。需要强调的是,将ISerializable添加至某个类时,需要同时实现GetObjectData以及特殊的构造函数。如果缺少GetObjectData,编译器将发出警告。但是,由于无法强制实现构造函数,所以,缺少构造函数时不会发出警告。如果在没有构造函数的情况下尝试反序列化某个类,将会出现异常。在反序列化过程中,使用出于此目的而提供的构造函数将SerializationInfo传递给类。对象反序列化时,对构造函数的任何可见性约束都将被忽略,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。