RTTI – Trabalhando com JSON em um RECORD

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]

2 comentários

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *