Which serializer did u use here?
DBreeze.Utils.CustomSerializator.Serializator = MySerializer;
Did u measure the pure serialization time of 1MLN of Foo objects, without inserting to DB, just pure serialization?
Also add time of converting serialized string into byte using UTF-8 encoding. May be it's ok?
We don't use JSON or XML at all in our business for huge amount of records - only optimal byte, we like it much more - faster read/write, much less space.
If we need to store some thousands of objects in a table, we can use integrated Microsoft JSON - not a big problem.
Built-in serializers, compressors etc. is the next abstraction level. You can try to create it yourself, but first, please, study carefully documentation, make many tests, feel database.