如何将设计时TWebActions与对象结构联系起来?

时间:2013-08-06 14:05:03

标签: delphi delphi-xe2 design-time superobject

我有一个Web服务,在设计时在TWebModule上定义了越来越多的TWebAction项目,并与OnAction事件相结合。

请求是HTTP GET通过URL和响应是'手工制作'JSON数据,即在运行时用'TSuperObject'.S['errormessage'] := lErrMsg;之类的语句组成
我想用JSON数据将此更改为HTTP POST请求,然后使用SuperObjects TSuperRttiContext AsJSON AsType 方法。

如何使用设计时间TWebactions 创建数据结构以映射/链接我的新“对象JSON(de)序列化”?这些对象都是不同的(一些属性可以在一个共同的祖先中),并且可能包含对象或记录属性本身(如FData: Array of TSubObject [SuperObject可以序列化正常]等。)

注意:我已经使用了一个快速而脏的枚举类型来收集时序统计信息(也需要维护),这也可以集成。

type
   TWebAct = (
    ttinfo,
    ttlogin,
    ...
    ttgetcostitemlist,
    ttgetvacationplanning
    );

基本上,我想在添加新的TWebAction时尽量减少需要维护的地方数量。

1 个答案:

答案 0 :(得分:1)

您可以使用TWebAct枚举将一系列记录放在一起,将Web操作与各自的请求和响应结构联系起来。

type
  // ancestor class for all requests and responses
  TJSONStructure = class(TObject);

  TJSONRequest = class(TJSONStructure);
  TJSONRequestClass = class of TJSONRequest;

  TJSONResponse = class(TJSONStructure);
  TJSONResponseClass = class of TJSONResponse;

const 
  WEBACT_STRUCTURES: array[TWebAct] of 
    record
      RequestClass: TJSONRequestClass;
      ResponseClass: TJSONResponseClass;
    end = (
      {ttInfo}   (RequestClass: TInfoRequest; ResponseClass: TInfoResponse)
    , {ttLogin}  (RequestClass: TLoginRequest; ResponseClass: TLoginResponse)
    ...
  );