技术探索

C#中解压缩并反序列化二进制数据

2013-09-23
1258

《使用C#将指定对象压缩并序列化为二进制》一文中介绍了如何将对象压缩并序列化为二进制,本文介绍相反的过程,即解压缩并反序列化(还原为对象)。

 

/// <summary>
/// 将二进制反序列化为指定的类型。
/// </summary>
/// <typeparam name="T">反序列化的目标类型。</typeparam>
/// <param name="bytes">要反序列化的二进制数据。</param>
/// <param name="isdecompress">是否解压缩。</param>
public T DeserializeFromBytes<T>(byte[] bytes, bool isdecompress = true)
{
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes))
    {
        System.Runtime.Serialization.IFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        if (isdecompress)
        {
            using (System.IO.Compression.DeflateStream ds = new System.IO.Compression.DeflateStream(ms, System.IO.Compression.CompressionMode.Decompress)) return (T)bf.Deserialize(ds);
        }
        else
        {
            return (T)bf.Deserialize(ms);
        }
    }
}