2013-08-06 26 views
0

我有一个Web服务,在设计时TWebModule上定义了越来越多的TWebAction项目,并且与OnAction事件相结合。如何将设计时TWebActions与TObjects的结构相链接?

请求是HTTP通过URL GET和响应“手工” JSON数据,即在运行时用语句像'TSuperObject'.S['errormessage'] := lErrMsg;
组成我想改变这与JSON数据,然后将所有的请求/响应HTTP POST请求JSON结构使用SuperObject TSuperRttiContext AsJSONAsType方法正在(de)序列化到适当的对象(和可能的记录)。

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

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

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

基本上,我希望尽量减少每当添加新TWebAction时需要维护的位置数量。

回答

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) 
    ... 
); 
+0

最后一个良好的使用使用元类 - 让我们来看看,如果我可以围绕这些;-) –

+0

LOL让我的头,如果你需要帮助,只是发牢骚。我的头现在很好地包裹着他们。 :) –

+0

我在这里hollering http://stackoverflow.com/questions/18125462/how-to-call-object-method-for-any-object-in-my-metaclass –