热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何理解C#中的序列化与反序列化

序列化(Serialization)是.NET平台最酷的特性之一。1、为什么要序列化:首先你应该明白系列化的目的就不难理解他了。系列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计

序列化(Serialization)是.NET平台最酷的特性之一。
1、为什么要序列化:
首先你应该明白系列化的目的就不难理解他了。系列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计算。比如你的客户端要调用服务器上的一个方法获得一个产品对象,比如方法为:public   Product   findProduct(int   product_id);  
  注意该方法返回一个Product对象,如果没有系列化技术,客户端就收不到返回的对象Product。而序列化的实现就是把对象变成一个可在网络上传输的字节流。

2、利用序列化技术,可以实现对象的备份和还原。序列化可以将内存中的对象(或对象图)序列化为数据流,并保存到磁盘上进行持久化;还可以将数据流反序列化为对象,实现对象的还原。序列化技术在分布式系统的数据传输中得到充分的利用,如: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 程序集中可以找到。

序列化和反序列化用于将一个对象保存到文件,和从文件读取。  
  using   System.IO;  
  using   System.Runtime.Serialization.Formatters.Binary;  
  [Serializable()]//可以序列化的类需要用这个属性标记  
  public   class   ToBeSerialized  
  {  
  public   int   a;  
  public   string   b;  
  public   ToBeSerialized(int   a,string   b)  
  {  
  this.a=a;  
  this.b=b;  
  }  
  }  
  public   class   Test  
  {  
   
  public   void   Serialize()//序列化  
  {  
  ToBeSerialized   tbs = new   ToBeSerialized(22,"SOM");  
  Stream   fs   =   File.Create("Serialized.txt");  
  BinaryFormatter   serializer   =   new   BinaryFormatter();  
  serializer.Serialize(fs,   tbs);  
  fs.Close();  
  }  
  public   void   DeSerialize()//反序列化  
  {  
  ToBeSerialized   restore;  
  Stream   fs   =   File.OpenRead("Serialized.txt");  
  BinaryFormatter   deserializer   =   new   BinaryFormatter();  
  restore   =   (ToBeSerialized)(deserializer.Deserialize(fs));//反序列化得到的对象  
  fs.Close();  
  }   
  }

在 .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),这样就可以实现对象的持久化。


推荐阅读
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • Lua基本语法lua与C#的交互(相当简单详细的例子)
    lua脚本与C#的交互本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验——高分辨率用户请根据需求调整网页缩放比例)1LuaAndC#——L ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • 四月个人任务:Linux基础操作与网络管理
    本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ... [详细]
  • Python中调用Java代码的方法与实践
    本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ... [详细]
  • 面对日益竞争激烈的就业市场,合理的职业规划对于在校大学生尤为重要。本文旨在探讨如何通过有效的自我认知、技能提升及目标设定,帮助计算机专业的学生构建清晰的职业路径,以增强就业竞争力。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 深入理解异步多线程编程模型
    现代计算机系统中的CPU通过并行处理提高效率,但所谓的并发处理实际上是一种基于轮询的模拟并行。本文探讨了现代处理器如何通过虚拟化技术实现更高的并发性能,以及在.NET框架中如何有效利用线程和异步编程模式。 ... [详细]
  • 本文介绍了如何在Windows操作系统中安装FFTW库,并详细说明了使用Visual Studio 2010进行4096点快速傅里叶变换(FFT)的步骤。包括下载预编译文件、生成库文件以及配置环境等关键环节。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
author-avatar
顽石1129_659
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有