gpt4 book ai didi

delphi - Delphi中如何使用SuperObject调用使用Object作为参数的方法?

转载 作者:行者123 更新时间:2023-12-03 14:43:48 28 4
gpt4 key购买 nike

我们可以使用 SuperObject 库通过名称调用某个对象的方法,并使用 SOInvoker 方法将其参数作为 json 字符串,如 answer 所示。

我想知道如何将创建的对象作为参数发送。我尝试发送它像

LObjectList := TObjectList.Create;
LSuperRttiCtx := TSuperRttiContext.Create;
LSuperObjectParameter := LObjectList.ToJson(LSuperRttiCtx);

SOInvoke(MyInstantiatedObject, 'MyMethod', LSuperObjectParameter);

但在 MyMethod 内部,LObjectList 引用丢失了。

我做错了什么?

super 对象库可以下载here

最佳答案

如果您使用记录数组而不是对象列表,它将起作用。如果您仍然想使用对象列表,则必须像这样编写编码器和解码器。我已经为 TObjectList 编写了编码器/解码器,您必须对对象执行相同的操作并将类名嵌入到某处。

ctx.SerialToJson.Add(TypeInfo(TObjectList), ObjectListToJSON);
ctx.SerialFromJson.Add(TypeInfo(TObjectList), JSONToObjectList);

function ObjectListToJSON(ctx: TSuperRttiContext; var value: TValue;
const index: ISuperObject): ISuperObject;
var
list: TObjectList;
i: Integer;
begin
list := TObjectList(value.AsObject);
if list <> nil then
begin
Result := TSuperObject.Create(stArray);
for i := 0 to list.Count - 1 do
Result.AsArray.Add(encodeyourobject(list[i]));
end else
Result := nil;
end;

function JSONToObjectList(ctx: TSuperRttiContext; const obj: ISuperObject; var Value: TValue): Boolean;
var
list: TObjectList;
i: Integer;
begin
list := nil;
case ObjectGetType(obj) of
stNull:
begin
Value := nil;
Result := True;
end;
stArray:
begin
list := TObjectList.Create;
for i := 0 to obj.AsArray.Length - 1 do
list.Add(decodeyourobject(obj.AsArray[i]));
Value := list;
Result := True;
end;
else
result := False;
end;
end;

关于delphi - Delphi中如何使用SuperObject调用使用Object作为参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com