是的,有。 所有你需要做的就是将你的数组封装在一个对象中。 这里是一个整数数组的例子:
` unit TransferObject;
interface
type
TIntArray = TArray<Integer>;
TIntegerArray = class(TObject)
private
FValues: TIntArray;
function GetValues: TIntArray;
procedure SetValues(const Value: TIntArray);
public
property Values : TIntArray read GetValues write SetValues;
constructor Create;
function Length : Integer;
procedure Resize(Count : Integer);
end;
implementation
{ TIntegerArray }
constructor TIntegerArray.Create;
begin
inherited create;
Resize(0);
end;
function TIntegerArray.GetValues: TIntArray;
begin
Result := FValues;
end;
function TIntegerArray.Length: Integer;
begin
Result := System.Length(FValues);
end;
procedure TIntegerArray.Resize(Count : Integer);
begin
SetLength(FValues, Count);
end;
procedure TIntegerArray.SetValues(const Value: TIntArray);
begin
FValues := Value;
end;
end.
unit ServerMethodsUnit1;
interface
uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth,
TransferObjects;
type
{$METHODINFO ON}
TServerMethods1 = class(TComponent)
private
{ Private declarations }
public
{ Public declarations }
function ReverseArray(Value : TIntegerArray) : TIntegerArray;
end;
{$METHODINFO OFF}
implementation
function TServerMethods1.ReverseArray(Value: TIntegerArray): TIntegerArray;
var
i, l : Integer;
Erg : TIntegerArray;
begin
Erg := TIntegerArray.Create;
Erg.Resize(Value.Length);
for i := 0 to Value.Length-1 do
begin
l := Value.Length-1-i;
Erg.Values[l] := Value.Values[i];
end;
Result := Erg;
end;
end.
`
这可能不是很优雅,但它的工作原理(与XE6测试)。 像这样,对象可以在内部用JSON封送(un),但使用接口的相同代码不起作用。
hth