private object SnapshotFromBinary(byte[] bytes)
{
int headerLength;
using (var memstream = new MemoryStream(bytes)) headerLength = ReadInt(memstream);
var headerBytes = new ArraySegment<byte>(bytes, 4, headerLength);
var snapshotBytes = new byte[bytes.Length - headerLength - 4];
Array.Copy(bytes, headerLength + 4, snapshotBytes, 0, snapshotBytes.Length);
var header = ParseSnapshotHeader(headerBytes);
var manifest = header.Manifest != null ? header.Manifest : string.Empty;
return system.Serialization.Deserialize(snapshotBytes, header.SerializerId, manifest);
}