unit Main; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, Quick.AutoMapper, Quick.JSONRecord, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; TJob = record Name : string; DateFrom : TDateTime; DateTo : TDateTime; end; TCarType = (ctOil, ctDiesel); TCar = class private fModel : string; fCarType : TCarType; published property Model : string read fModel write fModel; property CarType : TCarType read fCarType write fCarType; end; TUserBase = class(TJsonRecord) private fName : string; fAge : Integer; fCreationDate : TDateTime; fNumbers : TArray; published property Name : string read fName write fName; property Age : Integer read fAge write fAge; property CreationDate : TDateTime read fCreationDate write fCreationDate; property Numbers : TArray read fNumbers write fNumbers; end; TUser = class(TUserBase) private fId : Int64; fCash : Integer; fJob : TJob; fCar : TCar; public constructor Create; destructor Destroy; override; published property Id : Int64 read fId write fId; property Cash : Integer read fCash write fCash; property Job : TJob read fJob write fJob; property Car : TCar read fCar write fCar; end; TUser2 = class(TUserBase) private fIdUser : Int64; fJob : TJob; fMoney : Integer; fCar : TCar; public constructor Create; destructor Destroy; override; published property IdUser : Int64 read fIdUser write fIdUser; property Money : Integer read fMoney write fMoney; property Job : TJob read fJob write fJob; property Car : TCar read fCar write fCar; end; var User : TUser; User2 : TUser2; UserClone : TUser; job : TJob; AutoMapper : TAutoMapper; var Form1: TForm1; implementation {$R *.fmx} { TUser } constructor TUser.Create; begin fCar := TCar.Create; end; destructor TUser.Destroy; begin fCar.Free; inherited; end; { TUser2 } constructor TUser2.Create; begin fCar := TCar.Create; end; destructor TUser2.Destroy; begin fCar.Free; inherited; end; procedure TForm1.FormCreate(Sender: TObject); begin User := TUser.Create; User.Id := 17; User.CreationDate := Now(); User.Name := 'Jhon Miller'; User.Age := 30; User.Numbers := [1,2,3,4,5]; User.Cash := 3500; job.Name := 'Designer'; job.DateFrom := IncMonth(Now(),-12); job.DateTo := Now(); User.Job := job; User.Car.Model := 'Ferrari'; User.Car.CarType := ctOil; //User2 := TMapper.Map(User); AutoMapper := TAutoMapper.Create; try AutoMapper.CustomMapping.AddMap('Cash','Money'); AutoMapper.CustomMapping.AddMap('Id','IdUser'); User2 := AutoMapper.Map(User); //User2 := TUser2.Create; //User.MapTo(User2); //User2.MapFrom(User); //User2 := User.Map; //UserClone := User.Clone as TUser; //User2 := TUser2(User.Clone); //User2 := TMapper.Clone(User) as TUser2; Memo1.Lines.Add('COMPARE USER VS USER2'); Memo1.Lines.Add(Format('User.Id = %d / User2.IdUser = %d',[User.Id,User2.IdUser])); Memo1.Lines.Add(Format('User.CreationDate = %s / User2.CreationDate = %s',[DateTimeToStr(User.CreationDate),DateTimetoStr(User2.CreationDate)])); Memo1.Lines.Add(Format('User.Name = %s / User2.Name = %s',[User.Name,User2.Name])); Memo1.Lines.Add(Format('User.Age = %d / User2.Age = %d',[User.Age,User2.Age])); Memo1.Lines.Add(Format('User.Numbers = %d / User2.Numbers = %d',[User.Numbers[1],User2.Numbers[1]])); Memo1.Lines.Add(Format('User.Cash = %d / User2.Money = %d',[User.Cash,User2.Money])); Memo1.Lines.Add(Format('User.Job.Name = %s / User2.Job.Name = %s',[User.Job.Name,User2.Job.Name])); Memo1.Lines.Add(Format('User.Job.DateFrom = %s / User2.Job.DateFrom = %s',[DateTimeToStr(User.Job.DateFrom),DateTimeToStr(User2.Job.DateFrom)])); Memo1.Lines.Add(Format('User.Car.Model = %s / User2.Car.Model = %s',[User.Car.Model,User2.Car.Model])); Memo1.Lines.Add(' '); Memo1.Lines.Add('USER AS JSON RESULT'); Memo1.Lines.Add(Format('%s',[User.ToJson])); Memo1.Lines.Add(' '); Memo1.Lines.Add('USER2 AS JSON RESULT'); Memo1.Lines.Add(Format('%s',[User2.ToJson])); finally AutoMapper.Free; User.Free; User2.Free; end; end; end.