.Net中的序列化和反序列化详解

本文介绍了.NET Framework中序列化和反序列化的概念及其应用场景,包括状态保存与恢复、对象复制及跨应用域传递等。并通过示例展示了二进制序列化与反序列化的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解。

一、什么序列化和反序列化

序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中。反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程。
然而为什么需要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了,
对于序列化的主要用途有:
1)、将应用程序的状态保存在一个磁盘文件或数据库中,并在应用程序下次运行时恢复状态。例如, Asp.net 中利用序列化和反2)、序列化来保存和恢复会话状态。
3)、一组对象可以轻松复制到Windows 窗体的剪贴板中,再粘贴回同一个或者另一个应用程序。
将对象按值从一个应用程序域中发送到另一个程序域
并且如果把对象序列化成内存中的字节流,就可以利用一些其他的技术来处理数据,例如,对数据进行加密和压缩等。

二、序列化和反序列简单使用

.Net Framework 提供二种序列化方式:
1)、二进制序列化
2)、XML 和SOAP序列化
( XML Serializer , SOAP Serializer , BinarySerializer )
(SOAP:Simple Object Access Protocol简单对象访问协议)
序列化和反序列化的简单使用

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace Serializable
{
 [Serializable]
 public class Person
 {
  public string personName;

  [NonSerialized]
  public string personHeight;

  private int personAge;
  public int PersonAge
  {
   get { return personAge; }
   set { personAge = value; }
  }

  public void Write()
  {
   Console.WriteLine("Person Name: "+personName);
   Console.WriteLine("Person Height: " +personHeight);
   Console.WriteLine("Person Age: "+ personAge);
  }

 }
 class Program
 {
  static void Main(string[] args)
  {
   Person person = new Person();
   person.personName = "Jerry";
   person.personHeight = "175CM";
   person.PersonAge = 22;
   Stream stream = Serialize(person);

   //为了演示,都重置
   stream.Position = 0;
   person = null;

   person = Deserialize(stream);
   person.Write();
   Console.Read();

  }
  private static MemoryStream Serialize(Person person)
  {
   MemoryStream stream = new MemoryStream();

   // 构造二进制序列化格式器
   BinaryFormatter binaryFormatter = new BinaryFormatter();
   // 告诉序列化器将对象序列化到一个流中
   binaryFormatter.Serialize(stream, person);

   return stream;

  }

  private static Person Deserialize(Stream stream)
  {
   BinaryFormatter binaryFormatter = new BinaryFormatter();
   return (Person)binaryFormatter.Deserialize(stream);
  }

 }
}

主要是调用System.Runtime.Serialization.Formatters.Binary命名空间下的BinnaryFormatter类来进行序列化和反序列化,调用反序列化后的结果截图:
这里写图片描述

从中可以看出除了标记NonSerialized的其他成员都能序列化,注意这个属性只能应用于一个类型中的字段,而且会被派生类型继承。
SOAP 和XML 的序列化和反序列化和上面类似,只需要改下格式化器就可以了, 这里我就不列出来了。

下面还有一些 控制序列化和反序列化的方式,需要看的可以看原文链接
http://www.jb51.net/article/81952.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值