談談:.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

 

相關文章
相關標籤/搜索