Вот работающий пример
/// <summary>
/// Сериализация объекта и его запаковка
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Packing(object obj)
{
SoapFormatter ser = new SoapFormatter();
MemoryStream mem = new MemoryStream();
ser.Serialize(mem, obj);
MemoryStream baseMem = new MemoryStream();
ZipOutputStream zip = new ZipOutputStream(baseMem);
zip.SetLevel(9);
ZipEntry entry = new ZipEntry("file");
entry.DateTime = DateTime.Now;
entry.Size = mem.Length;
Crc32 crc = new Crc32();
crc.Reset();
crc.Update(mem.ToArray());
entry.Crc = crc.Value;
zip.PutNextEntry(entry);
zip.Write(mem.ToArray(), 0, (int)mem.Length);
zip.Close();
return baseMem.ToArray();
}
/// <summary>
/// распаковка объекта и его дисериализация
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static object UnPacking(byte[] zipData)
{
MemoryStream mem = new MemoryStream(zipData);
ZipEntry theEntry;
ZipInputStream zip = new ZipInputStream(mem);
MemoryStream baseMem = new MemoryStream();
while((theEntry = zip.GetNextEntry()) != null)
{
int size = 2048;
byte[] data = new byte[2048];
while(true)
{
size = zip.Read(data, 0, data.Length);
if(size > 0)
baseMem.Write(data, 0, size);
else
break;
}
}
zip.Close();
SoapFormatter ser = new SoapFormatter();
mem = new MemoryStream(baseMem.ToArray());
return ser.Deserialize(mem);
}