uses System.Classes;
type
TInfo = class(TPersistent)
private
FId: Integer;
FName: string;
published
property Id: Integer read FId write FId;
property Name: string
read FName write FName;
end;
TData = class(TComponent)
private
FText: string;
FInfo: TInfo;
public
constructor Create(
AOwner: TComponent); override;
published
property Text: string
read FText write FText;
//nested TPersistent streams too
property Info: TInfo read FInfo;
end;
constructor TData.Create(AOwner: TComponent);
begin
inherited;
FInfo := TInfo.Create;
end;
var
Data: TData;
Stream: TMemoryStream;
begin
Data := TData.Create(nil);
Data.Text := 'Hello';
Data.Info.Id := 1;
Data.Info.Name := 'first';
Stream := TMemoryStream.Create;
Stream.WriteComponent(Data);
WriteLn('size is ', Stream.Size);
end.