C# 將含有byte[]欄位的類序列化與反序列化
類DemoClass裡的string Title欄位包含了圖片檔案的名稱,byte[]內含有圖片檔案的內容。將該類DemoClass的例項demo序列化,轉為byte[],以便傳入MySQL資料庫中。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace SerializeDeserializeClass
{
[Serializable]
class DemoClass
{
public string Title;
public byte[] Arr;
}
class Demo
{
private static byte[] FileToBytes(string filePath)
{
FileInfo fi = new FileInfo(filePath);
byte[] buffer = new byte[fi.Length];
FileStream fs = fi.OpenRead();
fs.Read(buffer, 0, Convert.ToInt32(fi.Length));
fs.Close();
return buffer;
}
private static void CreateFile(byte[] fileBuffer, string newFilePath)
{
if (File.Exists(newFilePath))
{
File.Delete(newFilePath);
}
FileStream fs = new FileStream(newFilePath, FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(fileBuffer, 0, fileBuffer.Length); //用檔案流生成一個檔案
bw.Close();
fs.Close();
}
private static byte[] SerializeUIIntoBytes(string fileTitle,string filePath)
{
DemoClass demo = new DemoClass();
demo.Title = fileTitle;
demo.Arr = FileToBytes(filePath);
byte[] arr = null;
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, demo);
ms.Flush();
arr = ms.ToArray();
}
return arr;
}
private static DemoClass DeserializeUIBytes(byte[] arr)
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(arr, 0, arr.Length);
ms.Flush();
ms.Position = 0;
BinaryFormatter bf = new BinaryFormatter();
DemoClass demo = (DemoClass)bf.Deserialize(ms);
return demo;
}
}
public void UITest()
{
string heartPath = @"D:\pics\heart.png";
byte[] demoArr = SerializeUIIntoBytes("heart",heartPath);
DemoClass demo = DeserializeUIBytes(demoArr);
string newPath = @"D:\pics\hearttest.png";
CreateFile(demo.Arr, newPath);
}
static void Main(string[] args)
{
Demo d = new Demo();
d.UITest();
Console.Read();
}
}
}
----------稍後新增參考文獻-----------