谈谈:.Net中的序列化和反序列化

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

1、什么序列化和反序列化数据库

序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就能够轻松保存在磁盘文件或数据库中。反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程。app

然而为何须要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了,ui

对于序列化的主要用途有:加密

  • 将应用程序的状态保存在一个磁盘文件或数据库中,并在应用程序下次运行时恢复状态。例如, Asp.net 中利用序列化和反序列化来保存和恢复会话状态。
  • 一组对象能够轻松复制到Windows 窗体的剪贴板中,再粘贴回同一个或者另外一个应用程序。
  • 将对象按值从一个应用程序域中发送到另外一个程序域

而且若是把对象序列化成内存中的字节流,就能够利用一些其余的技术来处理数据,例如,对数据进行加密和压缩等。url

 

2、序列化和反序列简单使用spa

.Net Framework 提供二种序列化方式:.net

  • 二进制序列化
  • XML 和SOAP序列化

序列化和反序列化的简单使用:orm

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类来进行序列化和反序列化,调用反序列化后的结果截图:htm

 

相关文章
相关标签/搜索