在.NET Compact Framework 2.0中使用序列化

1.序列化概述

序列化(Serialization)是.NET平台最酷的特性之一。利用序列化技术,可以实现对象的备份和还原。序列化可以将内存中的对象(或对象图)序列化为数据流,并保存到磁盘上进行持久化;还可以将数据流反序列化为对象,实现对象的还原。序列化技术在分布式系统的数据传输中得到充分的利用,如:XML Web Service 利用XML序列化实现跨平台,.NET Remoting 则用到了二进制序列化和SOAP序列化。

.NET Compact Framework 2.0 支持XML序列化,不支持二进制序列化和SOAP序列化。而 .NET Compact Framework 1.0 连XML序列化都不支持。不过 OpenNETCF 1.x 为 .NET CF 1.0 实现了一个XML序列化的类,这个类在 OpenNETCF.Xml.dll 程序集中可以找到。

2.XML 序列化

在 .NET CF 2.0 中使用XML序列化很简单,跟 .NET Framework 中的一样。

// XML序列化 Customer 数组

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())

{

Customer[] customers = GetCustomers(); //从数据库或远程服务器获取客户

System.Xml.Serialization.XmlSerializer ser =

new System.Xml.Serialization.XmlSerializer(typeof(Customer));

ser.Serialize(ms, customers);

byte[] buffer = ms.ToArray();

// 获取XML文档的内容

string xml = System.Text.Encoding.ASCII.GetString

(buffer , 0, buffer .Length);

}

// XML反序列化 Customer 数组

using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer))

{

System.Xml.Serialization.XmlSerializer ser =

new System.Xml.Serialization.XmlSerializer(typeof(Customer));

Customer[] customers = ser.Deserialize(ms) as Customer[];

}

以上示例将对象序列化后,写入内存流中。你可以换成文件流(FileStream),这样就可以实现对象的持久化。

3.二进制序列化

从理论上说,二进制序列化无论是性能还是序列化后的数据流大小都比XML序列化更具优势,这个我曾经在《实战 Web Service 压缩传输》的PPT和Demo 中深入分析过。.NET CF 2.0 并没有提供二进制序列化的类,如果你想在 .NET CF 2.0 中进行二进制序列化,可以通过第三方的开源组件 CompactFormatter 来实现。由于CompactFormatter 同时支持 .NET CF 和 .NET Framework,我们可以将 CompactFormatter 序列化后的数据流可以转换为 byte[],并传输到服务器后进行反序列化。

今天我简单介绍一下 CompactFormatter 的使用,用来跟上面的XML序列化进行比较。

为了让一个实体类能够被 CompactFormatter 序列化,首先需要将这个实体类加上[CompactFormatter.Attributes.Serializable()] 特性。

[CompactFormatter.Attributes.Serializable()]

public class Customer {

public Customer() { } 

}

然后重写 Equals 方法。

public override bool Equals(object obj)

{

if (!obj.GetType().Equals(typeof(Customer)))

{

return false;

}

else

{

Customer answer = (Customer)obj;

return (answer.ID == ID && answer.Name == Name);

}

}

就如上面的代码中,我将实体类 Customer 加上 [CompactFormatter.Attributes.Serializable()] 特性,并重写了它的 Equals 方法,现在可以使用 CompactFormatter 进行序列化了。

// 二进制序列化 Customer 数组

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())

{

CompactFormatter.CompactFormatter ser =

new CompactFormatter.CompactFormatter();

ser.Serialize(ms, customers);

byte[] buffer = ms.ToArray();

}

// 二进制反序列化 Customer 数组

using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer))

{

CompactFormatter.CompactFormatter ser =

new CompactFormatter.CompactFormatter();

customers = ser.Deserialize(ms) as Customer[];

}

 

4.序列化示例

为了比较 .NET CF 2.0 下的XML序列化和 CompactFormatter 的二进制序列化,我做了一个示例,可以用它来测试两种序列化的性能。我会用两种序列化方法对一个包含1000个 Customer 对象的数组进行序列化和反序列化,并记录两种方法各自耗费的时间和序列化后数据流的字节大小。

具体操作是在 Visual Studio 2005 中采用调试模式将示例程序部署到 Pocket PC 2003 仿真器(最新的V2版本)中并运行。先执行XML序列化,接着执行XML反序列化,然后退出程序。在调试模式下重新启动示例程序,先后执行二进制序列化和二进制反序列化。测试结果如下

XML序列化

字节数:207870

耗时:6秒

XML反序列化

耗时:4秒

二进制序列化

字节数:200867

耗时:3秒

二进制反序列化

耗时:2秒

从测试结果看,CompactFormatter 的二进制序列化速度比XML序列化要快1倍,反序列化也是快1倍。但是序列化后的数据流大小却相差不多,这点我有点失望。

5.总结

在现实应用中,CompactFormatter 可以搭配 SharpZipLib 和 WS-Attachment 使用,从而实现低速网络下(GPRS/CDMA)的高性能数据传输。

 

源码下载:http://www.cnblogs.com/files/upto/serializationmobile.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要下载.net compact framework2.0,可以按照以下步骤进行: 1. 首先,打开浏览器,并在搜索引擎搜索“下载.net compact framework2.0”。 2. 在搜索结果,找到官方网站或可信赖的下载源。官方网站通常是最可靠和安全的下载来源。 3. 点击适当的下载链接或按钮,开始下载过程。 4. 下载可能需要一些时间,具体取决于您的网络连接速度。请耐心等待。 5. 下载完成后,您可能需要运行安装程序。根据您的操作系统,这可能是一个可执行文件(.exe)或压缩文件(.zip)。 6. 双击安装程序进行安装。根据您的需求和操作系统,可能需要选择特定的安装选项。 7. 安装过程可能需要几分钟,具体取决于您的计算机性能和安装选项。 8. 安装完成后,您现在可以开始使用.net compact framework2.0。根据您的需求,您可能需要创建一个新的项目或打开现有的项目。 请注意,下载和安装任何软件时,请确保您的计算机和网络安全。尽量避免从不可信的来源下载软件,以避免潜在的风险和恶意软件的安装。 ### 回答2: 要下载.NET Compact Framework 2.0,可以按照以下步骤操作: 1. 首先,在您的网络浏览器打开Microsoft官方网站(www.microsoft.com)。 2. 在网站主页上方的搜索框输入“.NET Compact Framework 2.0”。 3. 点击搜索按钮,然后选择搜索结果相关的链接。 4. 打开链接后,您将被重定向到.NET Compact Framework 2.0的下载页面。 5. 在下载页面上,选择适用于您的操作系统的版本(如Windows CE或Windows Mobile等)。 6. 点击相应的下载链接,以开始下载.NET Compact Framework 2.0的安装文件。 7. 下载完成后,找到下载的安装文件,并双击运行它。 8. 在安装程序启动后,按照步骤一步步进行安装。您可能需要选择安装的目标路径和其他相关选项。 9. 点击“下一步”直到安装程序完成安装过程。 10. 安装完成后,您现在已经成功下载并安装了.NET Compact Framework 2.0。 需要注意的是,以上步骤仅适用于在Microsoft官方网站上下载.NET Compact Framework 2.0的情况。如果您选择从其他来源下载,请务必保证来源可信和安全,并扫描下载的文件以确保其不含恶意软件。 ### 回答3: 要下载.net compact framework 2.0,首先需要访问微软官方网站。在微软官方网站上,可以找到.net compact framework 2.0的下载页面。在该页面上,有一个下载按钮,点击该按钮即可开始下载。下载过程可能需要一些时间,具体取决于你的网络速度和链接稳定性。 在下载完成后,需要运行安装程序。双击下载的安装程序,会弹出安装向导。按照向导的提示,逐步进行安装。安装过程需要选择安装目录,可以根据个人需求选择合适的目录。 安装完成后,就可以开始使用.net compact framework 2.0了。可以在开发环境选择使用该框架进行开发,或者在运行环境安装.net compact framework 2.0以保证软件的正常运行。 .net compact framework 2.0是一个用于在嵌入式设备和移动设备上运行.NET应用程序的框架。它提供了与桌面版.NET Framework相似的功能,但体积更小,适用于资源有限的设备。 总之,下载和安装.net compact framework 2.0相对简单,只需要按照官方网站的指引进行即可。在安装完成后,就可以开始使用该框架开发和运行应用程序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值