public void Serialize(Object obj, Stream stream) { if (!obj is GameObject) { throw new NotImplementedException("Can't serialize anything other than GameObject heiarchies"); } using (var ms = new MemoryStream()) { var writer = new BinaryWriter(ms); try { writer.Write(Iso8859.GetBytes(FileHeader)); writer.Write(Version); _serializer.Serialize(obj, writer); } finally { //do not close the writer as it closes ms. writer.Flush(); } ms.Position = 0; //write memory to stream var buffer = new byte[32 * 1024]; int bytesRead; while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) > 0) { stream.Write(buffer, 0, bytesRead); } } }