AutoMapperObjects.lpr 4.4 KB

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