Wieso verwendest Du kein Datenformat, wie z.B. JSON?
Mit den Versionsnummern wird die Leseroutine sehr schnell sehr unübersichtlich, aber es funktioniert.
Delphi-Quellcode:
Procedure TMyClass.ReadFromStream(aVersion : Integer; aStream : TStream);
Begin
Name := ReadString(aStream);
LastName := ReadString(aStream);
if aVersion>1020 then begin
Middle := ReadString(aStream);
If aVersion>1030 then
birthday := ReadDate(aStream);
...
end;
...
end;