JsonSerializerTest.dpr 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. program JsonSerializerTest;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. System.SysUtils,
  6. System.Generics.Collections,
  7. Quick.Commons,
  8. Quick.Console,
  9. Quick.Json.Serializer;
  10. type
  11. THost = class
  12. private
  13. fID: TGUID;
  14. fName : string;
  15. fIP : string;
  16. fPort : Integer;
  17. published
  18. property ID: TGUID read fID write fID;
  19. property Name : string read fName write fName;
  20. property IP : string read fIP write fIP;
  21. property Port : Integer read fPort write fPort;
  22. end;
  23. THostList = TObjectList<THost>;
  24. TConfig = class
  25. private
  26. fHosts : THostList;
  27. fDebugMode : Boolean;
  28. fLevel : Integer;
  29. published
  30. constructor Create;
  31. destructor Destroy; override;
  32. property Hosts : THostList read fHosts write fHosts;
  33. property DebugMode : Boolean read fDebugMode write fDebugMode;
  34. property Level : Integer read fLevel write fLevel;
  35. end;
  36. const
  37. jsonstring = '{"Hosts":['+
  38. '{"Name":"Host 1 año perfeción","IP":"127.0.0.1","Port":80, "ID":"{00FB3A62-F77D-4E71-9613-79E2E49D4562}"},'+
  39. '{"Name":"Host 2","IP":"192.168.1.1","Port":443,"ID":"{EBEBBC33-71F2-404A-8C0E-903CFA268616}"}'+
  40. '],'+
  41. '"DebugMode":true,"Level":1}';
  42. jsonstring2 = '{"Hosts":'+
  43. '{"List":['+
  44. '{"Name":"Host 1","IP":"127.0.0.2","Port":80, "ID":"{D52917AE-0A21-4B5B-945A-0F17FD158332}"},'+
  45. '{"Name":"Host 2","IP":"192.168.1.2","Port":443, "ID":"{80E6467A-282C-437E-B66A-D704004A2C3F}"}'+
  46. ']},'+
  47. '"DebugMode":true,"Level":2'+
  48. '}';
  49. var
  50. config : TConfig;
  51. host : THost;
  52. serializer : TJsonSerializer;
  53. json : string;
  54. guid: TGUID;
  55. { TConfig }
  56. constructor TConfig.Create;
  57. begin
  58. fHosts := THostList.Create(True);
  59. end;
  60. destructor TConfig.Destroy;
  61. begin
  62. fHosts.Free;
  63. inherited;
  64. end;
  65. begin
  66. try
  67. ReportMemoryLeaksOnShutdown := True;
  68. serializer := TJsonSerializer.Create(slPublishedProperty);
  69. try
  70. //created from object
  71. cout('Create from object',ccYellow);
  72. config := TConfig.Create;
  73. try
  74. host := THost.Create;
  75. host.Name := 'Host 1';
  76. host.IP := '127.0.0.1';
  77. host.Port := 80;
  78. CreateGUID(guid);
  79. host.ID:=guid;
  80. config.DebugMode := True;
  81. config.Level := 1;
  82. config.Hosts.Add(host);
  83. host := THost.Create;
  84. host.Name := 'Host 2';
  85. host.IP := '192.168.1.1';
  86. host.Port := 443;
  87. CreateGUID(guid);
  88. host.ID:=guid;
  89. config.Hosts.Add(host);
  90. json := serializer.ObjectToJson(config,True);
  91. cout(json,ccWhite);
  92. coutFmt('Capacity: %d / Count: %d',[config.Hosts.Capacity,config.Hosts.Count],etInfo);
  93. finally
  94. config.Free;
  95. end;
  96. //from json string without list property
  97. cout('Create from jsonstring without "List" property',ccYellow);
  98. config := TConfig.Create;
  99. try
  100. serializer.JsonToObject(config,jsonstring);
  101. json := serializer.ObjectToJson(config,True);
  102. cout(json,ccWhite);
  103. coutFmt('Capacity: %d / Count: %d',[config.Hosts.Capacity,config.Hosts.Count],etInfo);
  104. finally
  105. config.Free;
  106. end;
  107. //from json string with list property
  108. cout('Create from jsonstring with "List" property',ccYellow);
  109. config := TConfig.Create;
  110. try
  111. serializer.JsonToObject(config,jsonstring2);
  112. json := serializer.ObjectToJson(config,True);
  113. cout(json,ccWhite);
  114. coutFmt('Capacity: %d / Count: %d',[config.Hosts.Capacity,config.Hosts.Count],etInfo);
  115. finally
  116. config.Free;
  117. end;
  118. finally
  119. serializer.Free;
  120. end;
  121. ConsoleWaitForEnterKey;
  122. except
  123. on E: Exception do
  124. Writeln(E.ClassName, ': ', E.Message);
  125. end;
  126. end.