谈谈序列化,关于.net中的二进制序列化和xml序列化

开发 后端
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。本文主要介绍.NET中的二进制序列化和XML序列化。

序列化技术,就是将对象持久存储。 可以这样理解:序列化就是将对象占用的内存的数据copy到持久存储设备,比如硬盘。序列化有什么用呢?

两点作用:

1、持久的存储对象状态;

2、分布式运算中传递数据的底层实现。

.Net框架封装的序列化技术包含两种,即 二进制序列化 和 xml序列化

(以下代码都要求被序列化的对象的类型使用Serializable特征类)

二进制序列化的实现 (using System.Runtime.Serialization.Formatters.Binary;)

序列化代码:

  1. //打开文件流  
  2. FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);  
  3. //创建二进制序列化对象  
  4. BinaryFormatter bf = new BinaryFormatter();  
  5. //调用二进制序列化对象的序列化方法执行序列化操作  
  6. bf.Serialize(fs, 被序列化的对象);  
  7. //关闭文件流  
  8. fs.Close(); 

反序列化代码:

  1. //打开文件流  
  2. FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);  
  3. //创建二进制序列化对象  
  4. BinaryFormatter bf = new BinaryFormatter();  
  5. //调用二进制序列化对象的反序列化方法执行反序列化操作  
  6. 从文件中反序列化得到的对象 = bf.Deserialize(fs) as 被序列化对象的类型;  
  7. //关闭文件流  
  8. fs.Close(); 

XML序列化的实现(using System.Xml.Serialization;)

序列化代码:

  1. //打开文件流  
  2. FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);  
  3. //创建XML序列化对象  
  4. XmlSerializer xs = new XmlSerializer(typeof(被序列化对象的类型));  
  5. //调用XML序列化对象的序列化方法执行序列化操作  
  6. xs.Serialize(fs, 被序列化的对象);  
  7. //关闭文件流  
  8. fs.Close(); 

反序列化代码:

  1. //打开文件流  
  2. FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);  
  3. //创建XML序列化对象  
  4. XmlSerializer xs = new XmlSerializer(typeof(被序列化对象的类型));  
  5. //调用XML序列化对象的反序列化方法执行反序列化操作  
  6. 从文件中反序列化得到的对象 = xs.Deserialize(fs) as 被序列化对象的类型;  
  7. //关闭文件流  
  8. fs.Close(); 

当然这里所提供的是序列化和反序列化的默认实现,能应付大多数运用。 特殊情况可以还需要重写序列化的默认实现。MSDN里面也有较详细的示例代码。

【编辑推荐】

  1. .NET入门教程 学习.NET的几个基本步骤
  2. 使用ASP.NET操作IIS7中使用应用程序
  3. 解析.NET中容易混淆的委托与接口
  4. VB.NET和ASP.NET编码规范
  5. 回顾.NET Remoting分布式开发
责任编辑:于铁 来源: 17fx.Net
相关推荐

2011-05-18 15:20:13

XML

2009-09-09 14:45:41

XML序列化和反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2011-06-01 15:05:02

序列化反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2009-08-24 17:14:08

C#序列化

2009-09-09 16:10:11

.NET序列化和反序列

2009-08-06 11:16:25

C#序列化和反序列化

2023-12-13 13:49:52

Python序列化模块

2012-04-13 10:45:59

XML

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2009-06-14 22:01:27

Java对象序列化反序列化

2018-03-19 10:20:23

Java序列化反序列化

2011-04-02 13:47:01

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-08-25 14:24:36

C#序列化和反序列化

2021-11-18 07:39:41

Json 序列化Vue

2009-08-25 14:43:26

C#序列化和反序列化

2013-03-11 13:55:03

JavaJSON

2010-03-19 15:54:21

Java Socket
点赞
收藏

51CTO技术栈公众号