`
yijingyong
  • 浏览: 158326 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

.Net深入学习:序列化

阅读更多
 什么是序列化?
  ---.net的运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
  
  序列化的目的:
  1、以某种存储形式使自定义对象持久化;
  2、将对象从一个地方传递到另一个地方。
  
  实质上序列化机制是将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。而要想实际的写出这个流,就要使用那些实现了IFormatter接口的类里的Serialize和Deserialize方法。
  在.net框架里提供了这样两个类:
  
  一、BinaryFormatter
  
  BinaryFormatter使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化。
  
  首先我们创建一个类:
  [Serializable]
  public class MyObject {
   public int n1 = 0;
   public int n2 = 0;
   public String str = null;
  }
  Serializable属性用来明确表示该类可以被序列化。同样的,我们可以用NonSerializable属性用来明确表示类不能被序列化。
  接着我们创建一个该类的实例,然后序列化,并存到文件里持久:
  MyObject obj = new MyObject();
  obj.n1 = 1;
  obj.n2 = 24;
  obj.str = "一些字符串";
  IFormatter formatter = new BinaryFormatter();
  Stream stream = new FileStream("MyFile.bin", FileMode.Create,
  FileAccess.Write, FileShare.None);
  formatter.Serialize(stream, obj);
  stream.Close();
  
  而将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。
  IFormatter formatter = new BinaryFormatter();
  Stream stream = new FileStream("MyFile.bin", FileMode.Open,
  FileAccess.Read, FileShare.Read);
  MyObject obj = (MyObject) formatter.Deserialize(fromStream);
  stream.Close();
  
  // 下面是证明
  Console.WriteLine("n1: {0}", obj.n1);
  Console.WriteLine("n2: {0}", obj.n2);
  Console.WriteLine("str: {0}", obj.str);
  
  二、SoapFormatter
  
  前面我们用BinaryFormatter以二进制格式来序列化。很容易的我们就能把前面的例子改为用SoapFormatter的,这样将以xml 格式化,因此能有更好的可移植性。所要做的更改只是将以上代码中的格式化程序换成 SoapFormatter,而 Serialize 和 Deserialize 调用不变。对于上面使用的示例,该格式化程序将生成以下结果。
  
  
   xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:SOAP- ENC=http://schemas.xmlsoap.org/soap/encoding/
   xmlns:SOAP- ENV=http://schemas.xmlsoap.org/soap/envelope/
   SOAP-ENV:encodingStyle=
   "http://schemas.microsoft.com/soap/encoding/clr/1.0
   http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:a1="http://schemas.microsoft.com/clr/assem/ToFile">
(http://www.pconline.com.cn/pcedu/empolder/net/0405/368027.html)(摘抄)
分享到:
评论

相关推荐

    .NET之美:.NET关键技术深入解析 - 张子阳

    第二部分(6~17章)则对.NET中的关键知识点进行了深入剖析,如程序集、流和序列化、加密与解密、网络编程、.NET Remoting、在.NET中操作XML、.NET应用程序配置、基于角色的安全性、反射、多线程、对象生存期与垃圾...

    最全的.net序列化操作

    本篇文章将深入探讨.NET中的序列化操作,特别是使用C#语言实现的各种方法,包括对象到XML、字符串的转换。 **1. 序列化的基本概念** 序列化是指将对象的状态转化为可存储或可传输的形式,通常是二进制流或文本格式...

    在.NET中实现对象序列化

    以下是一个简单的示例,展示了如何使用这些特性进行对象序列化: ```csharp [XmlType("order")] public class Order { [XmlElement("id")] public string ID { get; set; } [XmlArray("items"), XmlArrayItem(...

    .Net内部培训:.Net 项目开发实训教程

    《.Net 项目开发实训教程》是一份专为IT专业人士准备的深度学习资源,主要针对C#和.NET框架的应用实践。教程以案例分析为核心,旨在帮助读者掌握完整的软件开发流程,从需求分析到系统测试,再到发布安装,全方位...

    精通ASP.NET 4.0网络编程:基础、框架与项目实战_源码

    在"精通ASP.NET 4.0网络编程:基础、框架与项目实战_源码"中,读者可以深入学习ASP.NET 4.0的核心概念和技术。这本书的内容可能涵盖了以下几个关键知识点: 1. **基础概念**:介绍ASP.NET的基础架构,包括Web Forms...

    ASP.NET AJAX深入浅出系列课程(5):客户端访问WebService(中):参数类型的序列化与反序列化

    在本课程中,我们将学习如何使用ASP.NET AJAX框架自动处理这个序列化和反序列化的过程。框架提供的ScriptService特性标记,可以指示ASP.NET将Web服务方法暴露给JavaScript,同时会自动处理输入参数的序列化和返回值...

    ASP.NET AJAX深入浅出系列课程(5):客户端访问WebService(中):参数类型的序列化与反序列化_PDF.zip

    在本系列课程的第五部分,我们将深入探讨如何在客户端访问WebService,并专注于参数类型的序列化与反序列化。 首先,让我们理解什么是序列化和反序列化。序列化是将对象的状态转换为可以存储或传输的数据格式的过程...

    asp.net 深入编程中文教程

    8. **ASP.NET Web API**:学习如何构建RESTful服务,处理HTTP请求,以及JSON和XML数据的序列化和反序列化。 9. **安全与身份验证**:讨论ASP.NET的安全机制,如身份验证(Forms Authentication、Windows ...

    hessian学习基础篇——序列化和反序列化

    本文将深入探讨Hessian框架的基础知识,它是一个高效的二进制序列化协议,广泛应用于Java和.NET之间跨语言通信。通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。...

    深入.net平台和c#编程PPT-09

    8. XML和.NET:.NET框架对XML的支持非常全面,包括XML文档对象模型(DOM)、XML序列化、XPath和XSLT等,使得XML在.NET应用程序中的使用变得简单。 9. 应用程序部署:理解.NET应用程序的部署策略,如ClickOnce部署,...

    C++序列化组件

    在IT领域,序列化是一个非常重要的概念,尤其是在编程语言...压缩包子文件"Serialize"可能包含的是实现序列化的一些源代码、示例或文档,学习这些内容可以帮助深入理解C++的序列化技术,并提升在实际项目中的应用能力。

    .NET技术学习大纲

    学习拆箱装箱的过程,理解字符串池的工作原理,掌握`ref`与`out`关键字的使用,了解正则表达式的语法以及XML和序列化的应用。 - **委托与事件**:学习委托的基本语法,了解内置委托`Func`和`Action`的使用,掌握匿名...

    深入.NET平台和C#编程 第六章 上机答案

    9. **XML与.NET**: .NET框架提供了强大的XML支持,包括XML文档对象模型(DOM)、XML序列化、XPath和XSLT等。上机练习可能涉及到XML数据的读取、修改和转换。 10. **错误处理与调试**: 在编程实践中,错误处理和调试...

    ADO.NET深入浅出

    这一讲将讲解如何使用DataSet的WriteXml和ReadXml方法进行XML数据的序列化和反序列化。 第八讲:异步数据访问 随着Web应用对性能和响应速度的要求提高,异步数据访问变得尤为重要。本讲将介绍如何使用ADO.NET的异步...

    深入 .NET平台和C#编程

    序列化与反射 8. Video 教学 Video: 演示 新闻阅读器 功能 9. 附录 类库中主要命名空间 数据结构 10. 指导学习 DLC 1 DLC 2 DLC 3 11. 在线培训 无 12. 项目案例 影院售票 13. 阶段...

    复杂.NET对象的XML序列化

    本文将深入探讨如何处理复杂的.NET对象的XML序列化,特别是在C# 3.0及更高版本中。自定义XML序列化器在处理特定需求时尤其有用,比如当标准的.NET序列化器无法满足我们对数据结构的控制要求时。 首先,让我们理解...

    XML序列化与反序列化整理文档(12套)

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。本文将深入探讨XML的序列化与反序列化,...所提供的文档和代码实例是深入学习和实践这一技术的好资源。

    c# CS登录实现(序列化反序列化)LoginProcessVersion1.0

    在C#中,我们可以使用.NET框架提供的`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类,`System.Xml.Serialization.XmlSerializer`类或者`System.Text.Json.JsonSerializer`类来进行序列化。...

    .NET中的优化序列化

    本文将深入探讨如何优化.NET中的序列化,提高应用的效率。 首先,让我们了解.NET内置的序列化技术。System.Xml.Serialization命名空间提供了XML序列化器,它可以将对象转换为XML文档。虽然它易于使用且兼容性强,但...

Global site tag (gtag.js) - Google Analytics