Trocar informações entre RECORDs com estrutura diferentes pode ser um trabalho relativamente cansativa. Uma opção é converter o RECORD de origem em JSON e em seguida carregar o JSON no RECORD de destino.
Executar esta atividade é possível fazendo uso das classes RTTI do delphi. Então a idéia mais básica é criar métodos para gerar JSON e carga do JSON com o RECORD desejado.
Uma proposta utilizando generics para lidar com JSON fontes:
[code]
TJsonRecord<T: Record > = class
public
/// gerar JSON
class function ToJson(O: T; const AIgnoreEmpty: Boolean = true;
const AProcBefore: TProc < TJsonObject >= nil): string;
/// carregar um JSON
class procedure FromJson(O: T; AJson: string);
end;
[/code]
Considerando uma estrutura de RECORD (origem e destino):
[code]
TRecordOrigem = record
nome:string;
email:string;
end;
TRecordDestino = record
nome:string;
email:string;
outros:integer;
end;
[/code]
A estrutura de identificação do RECORD por generics tem por finalidade aplicar RTTI para descobrir quais os FIELDS disponíveis no RECORD a ser transformado. Assim quando queremos gerar o JSON, fazemos:
[code]
var sJson:string;
dados : TRecordOrigem;
…
dados.nome := ‘xxxx’;
dados.email := ‘yyyy’;
sJson := TJsonRecord<TRecordOrigem>.ToJson(dados); // retorna o JSON
[/code]
No RECORD de destino, fazendo a carga do JSON:
[code]
var destino:TRecordDestino;
…
TJsonRecord<TRecordDestino>.FromJson(destino,sJson);
[/code]