Как и было обещано здесь: https://github.com/KrystianBigaj/kblib
Когда вы определили, например, запись как:
TTestRecord = record
I: Integer;
D: Double;
U: UnicodeString;
W: WideString;
A: AnsiString;
Options: TKBDynamicOptions;
IA: array[0..2] of Integer;
AI: TIntegerDynArray;
AD: TDoubleDynArray;
AU: array of UnicodeString;
AW: TWideStringDynArray;
AA: array of AnsiString;
R: array of TTestRecord; // record contain dynamic array of itself (D2009+)
end;
Вы можете сохранить всю динамическую запись в поток (в виде двоичных данных):
TKBDynamic.WriteTo(lStream, lTestRecord, TypeInfo(TTestRecord));
Чтобы загрузить его обратно:
TKBDynamic.ReadFrom(lStream, lTestRecord, TypeInfo(TTestRecord));
Это не обязательно должна быть запись, вы можете сделать то же самое для любого динамического типа, например:
TKBDynamic.WriteTo(lStream, lStr, TypeInfo(UnicodeString));
TKBDynamic.WriteTo(lStream, lInts, TypeInfo(TIntegerDynArray));
TKBDynamic.WriteTo(lStream, lArrayOfTestRecord, TypeInfo(TArrayOfTestRecord)); // TArrayOfTestRecord = array of TTestRecord;
Проверено на Delphi 2006/2009 / XE. Лицензия: MPL 1.1 / GPL 2.0 / LGPL 3.0
Смотрите readme для информации.