JsonSerializerTest.dpr 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. fName : string;
  14. fIP : string;
  15. fPort : Integer;
  16. published
  17. property Name : string read fName write fName;
  18. property IP : string read fIP write fIP;
  19. property Port : Integer read fPort write fPort;
  20. end;
  21. THostList = TObjectList<THost>;
  22. TConfig = class
  23. private
  24. fHosts : THostList;
  25. fDebugMode : Boolean;
  26. fLevel : Integer;
  27. published
  28. constructor Create;
  29. destructor Destroy; override;
  30. property Hosts : THostList read fHosts write fHosts;
  31. property DebugMode : Boolean read fDebugMode write fDebugMode;
  32. property Level : Integer read fLevel write fLevel;
  33. end;
  34. const
  35. jsonstring = '{"Hosts":[{"Name":"Host 1 año perfeción","IP":"127.0.0.1","Port":80},{"Name":"Host 2","IP":"192.168.1.1","Port":443}],"DebugMode":true,"Level":1}';
  36. jsonstring2 = '{"Hosts":{"List":[{"Name":"Host 1","IP":"127.0.0.2","Port":80},{"Name":"Host 2","IP":"192.168.1.2","Port":443}]},"DebugMode":true,"Level":2}';
  37. var
  38. config : TConfig;
  39. host : THost;
  40. serializer : TJsonSerializer;
  41. json : string;
  42. { TConfig }
  43. constructor TConfig.Create;
  44. begin
  45. fHosts := THostList.Create(True);
  46. end;
  47. destructor TConfig.Destroy;
  48. begin
  49. fHosts.Free;
  50. inherited;
  51. end;
  52. begin
  53. try
  54. serializer := TJsonSerializer.Create(slPublishedProperty);
  55. try
  56. //created from object
  57. cout('Create from object',ccYellow);
  58. config := TConfig.Create;
  59. try
  60. host := THost.Create;
  61. host.Name := 'Host 1';
  62. host.IP := '127.0.0.1';
  63. host.Port := 80;
  64. config.DebugMode := True;
  65. config.Level := 1;
  66. config.Hosts.Add(host);
  67. host := THost.Create;
  68. host.Name := 'Host 2';
  69. host.IP := '192.168.1.1';
  70. host.Port := 443;
  71. config.Hosts.Add(host);
  72. json := serializer.ObjectToJson(config,True);
  73. cout(json,ccWhite);
  74. coutFmt('Capacity: %d / Count: %d',[config.Hosts.Capacity,config.Hosts.Count],etInfo);
  75. finally
  76. config.Free;
  77. end;
  78. //from json string without list property
  79. cout('Create from jsonstring without "List" property',ccYellow);
  80. config := TConfig.Create;
  81. try
  82. serializer.JsonToObject(config,jsonstring);
  83. json := serializer.ObjectToJson(config,True);
  84. cout(json,ccWhite);
  85. coutFmt('Capacity: %d / Count: %d',[config.Hosts.Capacity,config.Hosts.Count],etInfo);
  86. finally
  87. config.Free;
  88. end;
  89. //from json string with list property
  90. cout('Create from jsonstring with "List" property',ccYellow);
  91. config := TConfig.Create;
  92. try
  93. serializer.JsonToObject(config,jsonstring2);
  94. json := serializer.ObjectToJson(config,True);
  95. cout(json,ccWhite);
  96. coutFmt('Capacity: %d / Count: %d',[config.Hosts.Capacity,config.Hosts.Count],etInfo);
  97. finally
  98. config.Free;
  99. end;
  100. finally
  101. serializer.Free;
  102. end;
  103. ConsoleWaitForEnterKey;
  104. except
  105. on E: Exception do
  106. Writeln(E.ClassName, ': ', E.Message);
  107. end;
  108. end.