- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们可以使用 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/
一些 JSON 序列化器返回 null对于空字符串数据字段,例如 { "searchtext": null, "moretext": "contains something", "bookdat
如何从通用 JSON 获取所有“id”成员值。 不知道它的结构。因为它非常复杂并且有很多子对象。它必须循环遍历所有子对象。 再次针对那些不断询问示例 JSON 在哪里的人。我的问题是如何从包含此成员的
我正在使用 Delphi XE4 和 SuperObject 1.24 我有以下结构: type TMyArray = Array of Array of Variant; TMyRecord
我正在尝试使用 super 对象在类中调用一个过程,但它不起作用,我在这里做错了什么? 代码示例: program test_rpc; {$IFDEF FPC} {$MODE OBJFPC}{$H
我正在使用 SuperObject 生成 JSON。我正在使用的服务器有一些对数据结果进行排序的规范(这与数据排序相关的事实与我关于排序的实际问题无关)。问题是,服务器希望这些值按照排序方式列出,例如
我最近在解析 JSON 时遇到了困难。您会看到,在使用 CloudFlare 客户端接口(interface) API 时,我想查找特定 IP 的“威胁评级”。问题是,由于 API 的设计,格式是这样
我广泛使用 SuperObject JSON 库。我需要能够检查对象中是否存在特定元素。我可以检查元素的值,例如不存在的整数返回 0。但是,如果 0 确实存在,则它是可能的值之一 - 因此我不能依赖于
我的服务器有以下 JSON: { "userid":"12", "username":"TestChar", "logged":"yes", "status":"Premium
我有以下代码来序列化动态类数组。由于某种原因,SuperObject 序列化的是私有(private)变量而不是类属性名称。任何人都可以建议如何修复 SuperObject 中的此行为吗? class
类型: TData = record str: string; int: Integer; boo: Boolean; flt: Double; end; TDataArray = A
我有一个带有一些 TObjectList<> 字段的对象,我尝试使用帮助表单 SuperObject 将其编码为 JSON . TLogs = TObjectList; TMyObject = cla
我正在使用 SuperObject 创建和操作 JSON 中的简单层次结构。 我的目标是将一组对象 {"id":..., "name":..., "parent":...} 转换为层次结构。示例: 我
我正在尝试使用 Delphi 7 中的 SuperObject 解析该字符串。 procedure TForm1.btn1Click(Sender: TObject); var obj: ISupe
我在我的一个项目中使用这个 super 对象单元作为 rpc 协议(protocol),在一个远程调用过程中(签名有一个 var Result arg)我想知道如何使用那个 arg... 没有文档吗?
我最近从使用 ULKJson 切换到 SuperObject,我一直在查看软件包附带的示例,并在大多数方面取得了一些进展,但似乎我遇到了一个障碍。更具体地说,我似乎找不到一个示例来展示如何访问数组中的
正如标题所示,我正在尝试使用 Delphi 7 和 SuperObject 库从结构非常简单的 JSON 文件中提取值,但我还没有找到涵盖这个最基本主题的任何示例,并希望一些大师能够提供帮助这里也许可
使用 SuperObject 库时,单个 JSON 对象当前缩进如下: { "name": "value", "int_arr": [ 1,2,3], "obj_arr": [ {
我想从这个 json 中获取所有用户。 { "status": "ok", "next_max_id": "AQAmA1l9NAQXa", "sections": [ {
我使用 SuperObject 库来处理 JSON。 我有这个 JSON(Mozilla FireFox、Chrome 书签文件的一部分): "roots": { "bookmark
我正在使用 Delphi 2010 和 superobject 库。 我已经了解如何解析 json 文件,但我不知道如何创建 json? 算法是: 解析 JSON 并加载到 TStringGrid 添
我是一名优秀的程序员,十分优秀!