Una solución fácil, aunque no muy óptima, es que tus objetos hereden de TComponent. Los streams tienen la facilidad de poder guardar los datos de un TComponent, esto esta hecho para poder leer y guardar los datos del DFM utilizando las clases TWriter y TReader:
Código:
var
MiObjeto: TComponent;
begin
FStream.WriteComponent(MiObjeto);
end;
El tema de guardar un objeto de cualquier clase, es que no todas las clases están compiladas para usar con RTTI, entonces lo único que nos queda es guardar el bloque de memoria que ocupa la clase, lo que no creo que sea muy viable, pues en la información del objeto en memoria, se apuntan muchas cosas por ejemplo direcciones a eventos, métodos... Lo mas normal cuando se quiere hacer algo así, es trabajar con registros planos, obviamente estos carecen de toda la funcionalidad de un objeto. Una solución viable, puede ser tener todos los datos que qiueras guardar de este objeto en un Record, y poder acceder a la dirección y tamaño de este, los que nos permitiría guardarlo sin ploblemas, sin necesitar de información que se volverá inmediatamente obsoleta (punteros a otras clases, eventos, métodos....)
Saludos!