QuickValue.dpr 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. program QuickValue;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. System.SysUtils,
  6. RTTI,
  7. Variants,
  8. System.TypInfo,
  9. Quick.Json.Serializer,
  10. Quick.Commons,
  11. Quick.Console,
  12. Quick.Value,
  13. Quick.Value.RTTI;
  14. type
  15. TDynArrayOfVariant = array of TVarRecord;
  16. TMyArray = TArray<TObject>;
  17. PMyArray = ^TMyArray;
  18. TMyObject = class
  19. private
  20. fName : string;
  21. fAge : Integer;
  22. public
  23. property Name : string read fName write fName;
  24. property Age : Integer read fAge write fAge;
  25. end;
  26. var
  27. flexvalue : TFlexValue;
  28. arr : TArray<string>;
  29. value : TValue;
  30. function Test(aValue : variant) : string;
  31. var
  32. i : Integer;
  33. serializer : TJsonSerializer;
  34. arr : array of variant;
  35. parr : Pointer;
  36. begin
  37. serializer := TJsonSerializer.Create(TSerializeLevel.slPublicProperty);
  38. if VarIsArray(aValue) then
  39. begin
  40. parr := VarArrayLock(aValue);
  41. var a := VarArrayGet(aValue,[1]);
  42. var b := VarTypeAsText(VarType(a) and VarTypeMask);
  43. SetLength(arr,VarArrayHighBound(aValue,1) + 1);
  44. arr := [aValue];
  45. Result := serializer.ArrayToJson(TValue.FromVariant(aValue));
  46. end;
  47. end;
  48. function Test2(aValue : Pointer) : string;
  49. var
  50. arr : TMyArray;
  51. parr : Pointer;
  52. begin
  53. //if VarIsArray(aValue) then
  54. begin
  55. //parr := VarArrayLock(aValue);
  56. //SetLength(arr,VarArrayHighBound(aValue,1) + 1);
  57. parr := aValue;
  58. SetLength(arr,2);
  59. arr := PMyArray(@parr)^;
  60. var a := arr[0];
  61. var b := TMyObject(a).Name;
  62. end;
  63. end;
  64. var
  65. obj : TMyObject;
  66. arr2 : TArray<TMyObject>;
  67. vari : Variant;
  68. begin
  69. try
  70. obj := TMyObject.Create;
  71. obj.Name := 'Joe';
  72. obj.Age := 30;
  73. arr2 := [obj];
  74. //vari := arr2;
  75. test2(arr2);
  76. arr := ['item1','item2','item3','item4'];
  77. flexvalue := arr;
  78. var a := Test(arr);
  79. SetLength(arr,0);
  80. arr := TArray<string>(flexvalue.AsPointer);
  81. coutFmt('arr[1]=%s',[arr[1]],etInfo);
  82. ConsoleWaitForEnterKey;
  83. except
  84. on E: Exception do
  85. Writeln(E.ClassName, ': ', E.Message);
  86. end;
  87. end.