1. 程式人生 > >C# 將含有byte[]欄位的類序列化與反序列化

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();
        }
    }
}

----------稍後新增參考文獻-----------