序列化和反序列化相信你們都常常聽到,也都會用, 然而有些人可能不知道:.net爲何要有這個東西以及.net Frameword如何爲咱們實現這樣的機制, 在這裏我也是簡單談談我對序列化和反序列化的一些理解。php
1、什麼序列化和反序列化數據庫
序列化通俗地講就是將一個對象轉換成一個字節流的過程,這樣就能夠輕鬆保存在磁盤文件或數據庫中。反序列化是序列化的逆過程,就是將一個字節流轉換回原來的對象的過程。app
然而爲何須要序列化和反序列化這樣的機制呢?這個問題也就涉及到序列化和反序列化的用途了,ui
對於序列化的主要用途有:加密
- 將應用程序的狀態保存在一個磁盤文件或數據庫中,並在應用程序下次運行時恢復狀態。例如, Asp.net 中利用序列化和反序列化來保存和恢復會話狀態。
- 一組對象能夠輕鬆複製到Windows 窗體的剪貼板中,再粘貼回同一個或者另外一個應用程序。
- 將對象按值從一個應用程序域中發送到另外一個程序域
而且若是把對象序列化成內存中的字節流,就能夠利用一些其餘的技術來處理數據,例如,對數據進行加密和壓縮等。url
2、序列化和反序列簡單使用spa
.Net Framework 提供二種序列化方式:.net
序列化和反序列化的簡單使用: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
