c#如何使用MemoryStream和BinaryFormatter進行對象的序列化和返序列化


1 下面是我寫的一個序列化的類

public static class ObjSerialize
{
/// <summary>
/// 將對象數組obj序列化,內存中的緩沖區的數據序列化
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Serialize(object obj)
{
byte[] arr = null;
if (obj!=null)
{
//MemoryStream類用於向內存而不是磁盤讀寫數據
using (MemoryStream ms=new MemoryStream())
{
//序列化操作,把內存中的東西寫到硬盤中
BinaryFormatter fomatter = new BinaryFormatter();
fomatter.Serialize(ms, obj);
ms.Flush();
arr = ms.ToArray();
}
}
return arr;
}

public static object Deserialize(byte[] arr)
{
object obj = null;
using (MemoryStream ms=new MemoryStream())
{
ms.Write(arr, 0, arr.Length);
ms.Flush();
ms.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
obj= formatter.Deserialize(ms);
}
return obj;
}
}

2 測試這個類

  我自己新建了一個student的對象,他只有id和name兩個屬性

 控制台測試代碼這里需要吧student類標記為serializable

Student stu = new Student()
{
ID = 1,
Name = "王寶強"
};

byte[] arr= ObjSerialize.Serialize(stu);
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}

結果如下:

反序列化的測試代碼和結果如下

Student ss= (Student)ObjSerialize.Deserialize(arr);
Console.WriteLine("{0}----{1}",ss.ID,ss.Name);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM