DataSnap 服务器方法 - 编组嵌套对象

DataSnap Server Methods - Marshalling nesting objects

我在 Delphi XE6

中有一个数据快照客户端/服务器

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

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 更改为字符串,它可以正常工作

所以,问题出在字符串列表 属性 "Values" 上,我已确保它已创建和销毁

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

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

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

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

你的情况:-

f值:字符串;

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

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