private byte[] Serialize(object snapshot)
{
var serializer = system.Serialization.FindSerializerFor(snapshot);
byte[] headerBytes;
using (var headerOut = new MemoryStream())
{
WriteInt(headerOut, serializer.Identifier);
if (serializer is SerializerWithStringManifest)
{
var manifest = ((SerializerWithStringManifest) serializer).Manifest(snapshot);
if (!string.IsNullOrEmpty(manifest))
{
var manifestBinary = Encoding.UTF8.GetBytes(manifest);
headerOut.Write(manifestBinary, 0, manifestBinary.Length);
}
}
else if (serializer.IncludeManifest)
{
var snapshotTypeBinary = Encoding.UTF8.GetBytes(TypeQualifiedNameForManifest(snapshot.GetType()));
headerOut.Write(snapshotTypeBinary, 0, snapshotTypeBinary.Length);
}
headerBytes = headerOut.ToArray();
}
using (var output = new MemoryStream())
{
WriteInt(output, headerBytes.Length);
output.Write(headerBytes, 0, headerBytes.Length);
var snapshotBytes = serializer.ToBinary(snapshot);
output.Write(snapshotBytes, 0, snapshotBytes.Length);
return output.ToArray();
}
}