2
0

AutoMappingObjects.dpr 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. program AutoMappingObjects;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. System.SysUtils,
  6. Quick.Commons,
  7. Quick.Console,
  8. Quick.JSONRecord,
  9. Quick.AutoMapper;
  10. type
  11. TJob = record
  12. Name : string;
  13. DateFrom : TDateTime;
  14. DateTo : TDateTime;
  15. end;
  16. TCarType = (ctOil, ctDiesel);
  17. TCar = class
  18. private
  19. fModel : string;
  20. fCarType : TCarType;
  21. published
  22. property Model : string read fModel write fModel;
  23. property CarType : TCarType read fCarType write fCarType;
  24. end;
  25. TUserBase = class(TJsonRecord)
  26. private
  27. fName : string;
  28. fAge : Integer;
  29. fCreationDate : TDateTime;
  30. fNumbers : TArray<Integer>;
  31. published
  32. property Name : string read fName write fName;
  33. property Age : Integer read fAge write fAge;
  34. property CreationDate : TDateTime read fCreationDate write fCreationDate;
  35. property Numbers : TArray<Integer> read fNumbers write fNumbers;
  36. end;
  37. TUser = class(TUserBase)
  38. private
  39. fId : Int64;
  40. fCash : Integer;
  41. fJob : TJob;
  42. fCar : TCar;
  43. public
  44. constructor Create;
  45. destructor Destroy; override;
  46. published
  47. property Id : Int64 read fId write fId;
  48. property Cash : Integer read fCash write fCash;
  49. property Job : TJob read fJob write fJob;
  50. property Car : TCar read fCar write fCar;
  51. end;
  52. TUser2 = class(TUserBase)
  53. private
  54. fIdUser : Int64;
  55. fName : string;
  56. fAge : Integer;
  57. fNumbers : TArray<Integer>;
  58. fJob : TJob;
  59. fMoney : Integer;
  60. fCar : TCar;
  61. public
  62. constructor Create;
  63. destructor Destroy; override;
  64. published
  65. property IdUser : Int64 read fIdUser write fIdUser;
  66. property Name : string read fName write fName;
  67. property Age : Integer read fAge write fAge;
  68. property Numbers : TArray<Integer> read fNumbers write fNumbers;
  69. property Money : Integer read fMoney write fMoney;
  70. property Job : TJob read fJob write fJob;
  71. property Car : TCar read fCar write fCar;
  72. end;
  73. var
  74. User : TUser;
  75. User2 : TUser2;
  76. UserClone : TUser;
  77. job : TJob;
  78. AutoMapper : TAutoMapper<TUser,TUser2>;
  79. { TUser }
  80. constructor TUser.Create;
  81. begin
  82. fCar := TCar.Create;
  83. end;
  84. destructor TUser.Destroy;
  85. begin
  86. fCar.Free;
  87. inherited;
  88. end;
  89. { TUser2 }
  90. constructor TUser2.Create;
  91. begin
  92. fCar := TCar.Create;
  93. end;
  94. destructor TUser2.Destroy;
  95. begin
  96. fCar.Free;
  97. inherited;
  98. end;
  99. begin
  100. ReportMemoryLeaksOnShutdown := True;
  101. try
  102. User := TUser.Create;
  103. User.Id := 17;
  104. User.CreationDate := Now();
  105. User.Name := 'Juan';
  106. User.Age := 30;
  107. User.Numbers := [1,2,3,4,5];
  108. User.Cash := 3500;
  109. job.Name := 'Designer';
  110. job.DateFrom := IncMonth(Now(),-12);
  111. job.DateTo := Now();
  112. User.Job := job;
  113. User.Car.Model := 'Ferrari';
  114. User.Car.CarType := ctOil;
  115. //User2 := TMapper<TUser2>.Map(User);
  116. AutoMapper := TAutoMapper<TUser,TUser2>.Create;
  117. try
  118. AutoMapper.CustomMapping.AddMap('Cash','Money');
  119. AutoMapper.CustomMapping.AddMap('Id','IdUser');
  120. User2 := AutoMapper.Map(User);
  121. //User2 := TUser2.Create;
  122. //User.MapTo(User2);
  123. //User2.MapFrom(User);
  124. //User2 := User.Map<TUser2>;
  125. //UserClone := User.Clone as TUser;
  126. //User2 := TUser2(User.Clone);
  127. //User2 := TMapper<TUserBase>.Clone(User) as TUser2;
  128. cout('COMPARE USER VS USER2',etTrace);
  129. cout('User.Id = %d / User2.IdUser = %d',[User.Id,User2.IdUser],etInfo);
  130. cout('User.CreationDate = %s / User2.CreationDate = %s',[DateTimeToStr(User.CreationDate),DateTimetoStr(User2.CreationDate)],etInfo);
  131. cout('User.Name = %s / User2.Name = %s',[User.Name,User2.Name],etInfo);
  132. cout('User.Age = %d / User2.Age = %d',[User.Age,User2.Age],etInfo);
  133. cout('User.Numbers = %d / User2.Numbers = %d',[User.Numbers[1],User2.Numbers[1]],etInfo);
  134. cout('User.Cash = %d / User2.Money = %d',[User.Cash,User2.Money],etInfo);
  135. cout('User.Job.Name = %s / User2.Job.Name = %s',[User.Job.Name,User2.Job.Name],etInfo);
  136. cout('User.Job.DateFrom = %s / User2.Job.DateFrom = %s',[DateTimeToStr(User.Job.DateFrom),DateTimeToStr(User2.Job.DateFrom)],etInfo);
  137. cout('User.Car.Model = %s / User2.Car.Model = %s',[User.Car.Model,User2.Car.Model],etInfo);
  138. cout(' ',etInfo);
  139. cout('USER AS JSON RESULT',etTrace);
  140. cout('%s',[User.ToJson],etInfo);
  141. cout(' ',etInfo);
  142. cout('USER2 AS JSON RESULT',etTrace);
  143. cout('%s',[User2.ToJson],etInfo);
  144. finally
  145. AutoMapper.Free;
  146. User.Free;
  147. User2.Free;
  148. end;
  149. ConsoleWaitForEnterKey;
  150. except
  151. on E: Exception do
  152. Writeln(E.ClassName, ': ', E.Message);
  153. end;
  154. end.