program AutoMappingObjects; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Quick.Commons, Quick.Console, Quick.JSONRecord, Quick.AutoMapper; type 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; fName : string; fAge : Integer; fNumbers : TArray; fJob : TJob; fMoney : Integer; fCar : TCar; public constructor Create; destructor Destroy; override; published property IdUser : Int64 read fIdUser write fIdUser; property Name : string read fName write fName; property Age : Integer read fAge write fAge; property Numbers : TArray read fNumbers write fNumbers; 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; { 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; begin ReportMemoryLeaksOnShutdown := True; try User := TUser.Create; User.Id := 17; User.CreationDate := Now(); User.Name := 'Juan'; 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; cout('COMPARE USER VS USER2',etTrace); cout('User.Id = %d / User2.IdUser = %d',[User.Id,User2.IdUser],etInfo); cout('User.CreationDate = %s / User2.CreationDate = %s',[DateTimeToStr(User.CreationDate),DateTimetoStr(User2.CreationDate)],etInfo); cout('User.Name = %s / User2.Name = %s',[User.Name,User2.Name],etInfo); cout('User.Age = %d / User2.Age = %d',[User.Age,User2.Age],etInfo); cout('User.Numbers = %d / User2.Numbers = %d',[User.Numbers[1],User2.Numbers[1]],etInfo); cout('User.Cash = %d / User2.Money = %d',[User.Cash,User2.Money],etInfo); cout('User.Job.Name = %s / User2.Job.Name = %s',[User.Job.Name,User2.Job.Name],etInfo); cout('User.Job.DateFrom = %s / User2.Job.DateFrom = %s',[DateTimeToStr(User.Job.DateFrom),DateTimeToStr(User2.Job.DateFrom)],etInfo); cout('User.Car.Model = %s / User2.Car.Model = %s',[User.Car.Model,User2.Car.Model],etInfo); cout(' ',etInfo); cout('USER AS JSON RESULT',etTrace); cout('%s',[User.ToJson],etInfo); cout(' ',etInfo); cout('USER2 AS JSON RESULT',etTrace); cout('%s',[User2.ToJson],etInfo); finally AutoMapper.Free; User.Free; User2.Free; end; ConsoleWaitForEnterKey; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.