序列化及反序列化

序列化和反序列化可以方便地实现对象(Object)和字节数组(byte[])的转换,其中序列化将Object转换为byte[],反序列化将byte[]转换为Object。

其中值得注意的有以下几个方面:

1. 将序列化的对象进行反序列化时,其中间的byte[]一定确保没有变化。否则将出现序列化(反序列化)异常。

2. 序列化和反序列化的对象需声明[Serializable](可序列化的),切其包含的全部内容(字段)需可序列化。否则将发生序列化异常。(无法加载序列化所需的类型)

3. 在将已序列化的对象反序列化时,不要求其byte[]的长度一致,反序列化时会自动省略其所需内容后的额外数据。

using System;
using System.Collections.Generic;
using System.Text;

namespace talefox.ShareLib
{
    public class Serialable
    {
        /// <summary>  
        /// 序列化  
        /// </summary>  
        /// <param name="data">要序列化的对象</param>  
        /// <returns>数据缓冲区</returns>  
        public static byte[] Serialize(object obj)
        {
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            formatter.Serialize(stream, obj);
            byte[] data = stream.GetBuffer();
            return data;
        }
        /// <summary>  
        /// 反序列化  
        /// </summary>  
        /// <param name="data">数据缓冲区</param>  
        /// <returns>对象</returns>  
        public static object Deserialize(byte[] data)
        {
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            System.IO.MemoryStream stream = new System.IO.MemoryStream(data);
            data = null;
            Object obj = formatter.Deserialize(stream);
            return obj;
        }
    }
}

原文地址:https://www.cnblogs.com/talefox/p/1322580.html