【问题标题】:DataSnap Server Methods - Marshalling nesting objectsDataSnap 服务器方法 - 编组嵌套对象
【发布时间】:2016-06-06 15:18:24
【问题描述】:

我在 Delphi XE6 中有一个 datasnap 客户端/服务器

我在客户端的以下服务器方法调用中收到无效的指针操作。

S := ClientModule1.ServerMethods1Client.getReport(RunReportObj,
        ReturnFileSize);

当我调试(进入)时,它发现错误在我传递给服务器方法的 TRunReportObj 的嵌套对象中

 TRunReportObject
 private
  ...
  fCriteria: TCriteriaList;
  ...
public
  function AddCrit(Const aField, aOperation: String; Const aValues: TStrings): TCriteriaObject; 
  property CritObjects[index: Integer]: TCriteriaObject read GetCritObject;
  property Criteria: TCriteriaList read fCriteria write fCriteria;
...
end;

TCriteriaList 是 TObjectList

TCriteriaObject = class(TJSONParamObject)
  private
    fField: String;
    fOperation: String;
    fValues: TStringList;
    function GetJSONObject: TJSONObject; override;
  public
    property Field: String read fField write fField;
    property Operation: String read fOperation write fOperation;
    property Values: TStringList read fValues write fValues;
    constructor create;
    destructor destroy;override;
  end;

如果我将 fValues: TStringList 更改为字符串,它可以正常工作

所以,问题出在 stringlist 属性“Values”上,我确保它已被创建和销毁

constructor TCriteriaObject.create;
begin
  inherited Create;
  fValues := TStringList.create;
end;

destructor TCriteriaObject.destroy;
begin
  fValues.Free;
  inherited destroy;
end;

我认为可能存在编组问题???谁能证实这一点?

【问题讨论】:

  • 您可以尝试将以下属性添加到您的 FValues:TCriteriaObject 中的 TStringList 字段 - [JSONReflect(ctTypeObject, rtTypeObject, TStringListInterceptor, nil, True)] 并将 Data.DBXJSONReflect 添加到您的 uses 子句中。

标签: delphi datasnap


【解决方案1】:

我在 Delphi XE6 中也遇到过类似的问题。我必须将任何 TStringList 转换为 String。

在你的情况下:-

fValues : 字符串;

属性值:字符串读取 GetValues 写入 SetValues;

在例程 GetValues 和 SetValues 中,您需要与字符串相互转换。

【讨论】:

  • 抱歉花了这么长时间才回来查看。是的,彼得,这就是我立即修复的方法,我希望了解有关 TStringList 的一些信息。谢谢!我会接受你的回答,因为你确实提供了正确的答案。
猜你喜欢
  • 1970-01-01
  • 2017-06-27
  • 2011-07-25
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2022-01-17
相关资源
最近更新 更多