Я пишу небольшой вспомогательный класс для операций REST. Одна из моих основных целей - обеспечить автоматическое приведение c из ответа тела в JSON к указанному c объекту с использованием обобщенных типов.
Вот так выглядит одна из функций в классе помощника:
function RESTServiceCallHelper.ExecuteAsObject<TObj>(resource: string): TObj;
var
RestRequest: TRESTRequest;
obj: TObj;
begin
PrepareRequest(RestRequest, resource);
RestRequest.Execute;
obj := TJson.JsonToObject<TObj>(RestRequest.Response.Content);
result:=obj;
end;
И вот как я пытаюсь его использовать:
type
TPartnerCreditInfo = class
FlCreditClassDesc: string;
FCppID: string;
FCreditClass: string;
FCreditClassDesc: string;
FCreditLimit_CurrencyCode: string;
FCreditLimit: double;
FAmountBalance: double;
FAmountBalance_CurrencyCode: string;
FAmountBalanceLast: double;
FAmountBalanceLast_CurrencyCode: string;
end;
procedure TModuleX.CallAPIS;
var
lRESTHelper : TrpRESTServiceCallHelper;
pc: TPartnerCreditInfo;
begin
lRESTHelper:= TrpRESTServiceCallHelper.Create('https://mydomain/api');
lRESTHelper.AddQueryStringParam('param1','paramvalue');
pc:=lRESTHelper.ExecuteAsObject<TPartnerCreditInfo>('resource');
showmessage(pc.FCppID);
end;
Проблема, с которой я сталкиваюсь, заключается в следующем:
obj := TJson.JsonToObject<TObj>(RestRequest.Response.Content);
[dcc32 Error] RESTServiceCallObj.pas(99): E2511 Type parameter 'T' must be a class type
Согласно документации, параметр T для функции JsonToObject должен быть классом, а TPartnerCreditInfo также является классом. Почему TPartnerCreditInfo не распознается?