There isn't really any good way that I can think of to handle a 'unified serialization that is compatible with the standard TStream', but the write-it-yourself option is always good in this case. Either that, or I think Brucey may have written a bit of serialization code that you could look at for reference.
Have you looked at the brl.data module? The way it worked was you extended TDataType to register a data type, and then wrote the code for writing and reading object data. Then you could use stream.WriteObject obj to write any objects to any stream (wrapped in a TDataStream). It's OK to have to write your own serialization code, but I think there should be a unified way to call it, so one can write more generic code.