2
0

ComplexObjects.dpr 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. program ComplexObjects;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. Classes,
  6. System.SysUtils,
  7. Quick.Console,
  8. Quick.Json.Serializer;
  9. type
  10. TUser = class
  11. private
  12. fName : string;
  13. fAge : Integer;
  14. fPhoto : TMemoryStream;
  15. public
  16. constructor Create;
  17. destructor Destroy; override;
  18. published
  19. property Name : string read fName write fName;
  20. property Age : Integer read fAge write fAge;
  21. property Photo : TMemoryStream read fPhoto write fPhoto;
  22. end;
  23. var
  24. json : string;
  25. user : TUser;
  26. photosize : Integer;
  27. serializer : TJsonSerializer;
  28. { TUser }
  29. constructor TUser.Create;
  30. begin
  31. fPhoto := TMemoryStream.Create;
  32. end;
  33. destructor TUser.Destroy;
  34. begin
  35. fPhoto.Free;
  36. inherited;
  37. end;
  38. begin
  39. try
  40. user := TUser.Create;
  41. user.Name := 'John';
  42. user.Age := 30;
  43. user.Photo.LoadFromFile('.\photo.jpg');
  44. photosize := user.Photo.Size;
  45. cout('Photo Size: ' + photosize.ToString,ccWhite);
  46. serializer := TJsonSerializer.Create(TSerializeLevel.slPublicProperty,True);
  47. try
  48. //serializer.UseBase64Stream := False;
  49. //serialize
  50. cout('Serialize User:',ccYellow);
  51. json := serializer.ObjectToJson(user);
  52. //cout(json,ccWhite);
  53. user.Free;
  54. //deserialize
  55. cout('Deserialize User:',ccYellow);
  56. user := TUser.Create;
  57. serializer.JsonToObject(user,json);
  58. //check if deseralization is correct
  59. Assert(user.Name = 'John','Name serialize error!');
  60. Assert(user.Age = 30,'Age serialize error!');
  61. Assert(user.Photo.Size = photosize,'Photo serialize error!');
  62. user.Photo.SaveToFile('.\photo_new.jpg');
  63. cout('Photo Size: ' + photosize.ToString,ccWhite);
  64. cout(user.Name,ccWhite);
  65. finally
  66. serializer.Free;
  67. end;
  68. user.Free;
  69. ConsoleWaitForEnterKey;
  70. except
  71. on E: Exception do
  72. Writeln(E.ClassName, ': ', E.Message);
  73. end;
  74. end.