>AObject.SaveToStream( Stream );
を

if AObject is THoge then
begin
 Stream.Write(THoge(AObject).Buffer^, THoge(AObject).BufferSize);
 Stream.Write(THoge(AObject).Name[0], Length(THoge(AObject).Name));
 ...
end
else if AObject is TFoo then
begin
 ...
end
else
...
と直せばできるYO!