@
tuna
Size kuvvetle önerim JSON paket olarak alış verişi yapmaktır.
* JSON içerik transferi, olası üçüncü parti yazılımlar ile dahi konuşturmak için faydalıdır. Bu yapıyı bir constructor ve destructor ekleyip Add ile bir araya getirdikten sonra JSON formatına dönüştüren bir sınıf hazırlamış olursunuz. Bu sınıfın TOJSon gibi bir property ile elde edilecek JSON ürünü sunucu/client arasında transfer edersiniz. Böylece uyumlu bir yapı kurmuş olursunuz.
EK :
Bir örnek hazırladım
unit BilgilerU;
interface
Uses System.JSON, System.SysUtils;
Type
tBilgiler = Record
strAlan : string;
intAlan : integer;
dblAlan : double;
end;
tBilgiArray = Array of tBilgiler;
Type
tBilgiClass = class( TObject )
private
FBilgiArray : TBilgiArray;
public
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure Add( aBilgi: tBilgiler );
function ToJSon : String;
end;
implementation
{ tBilgiClass }
procedure tBilgiClass.Add(aBilgi: tBilgiler);
begin
if High(FBilgiArray) = -1 then SetLength( FBilgiArray, 1)
else SetLength( FBilgiArray, High(FBilgiArray)+1+1); // 0 based
FBilgiArray[ High(FBilgiArray) ] := aBilgi;
end;
procedure tBilgiClass.Clear;
begin
SetLength ( FBilgiArray, 0 );
Finalize ( FBilgiArray );
FBilgiArray := nil;
end;
constructor tBilgiClass.Create;
begin
inherited;
end;
destructor tBilgiClass.Destroy;
begin
Clear();
inherited;
end;
function tBilgiClass.ToJSon: String;
var
i : Integer;
aJSONObject : System.JSON.TJSONObject;
aJSONArray : System.JSON.TJSONArray;
begin
aJSONArray := TJSONArray.Create;
try
for i := Low(FBilgiArray) to High(FBilgiArray) do
begin
aJSONObject := System.JSON.TJSONObject.Create;
aJSONObject.AddPair( 'strAlan', FBilgiarray[i].strAlan );
aJSONObject.AddPair( 'intAlan', Format( '%d', [ FBilgiarray[i].intAlan ] ) );
aJSONObject.AddPair( 'dblAlan', Format( '%f', [ FBilgiarray[i].dblAlan ] ) );
aJSONArray.Add( aJSONObject );
end;
Result := aJSONArray.Format;
finally
aJSONArray.Free;
end;
end;
end.
Kullanımı :
uses BilgilerU;
var
aBilgiler : BilgilerU.tBilgiClass;
procedure TForm1.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Bilgi : TBilgiler;
begin
Randomize;
Bilgi.dblAlan := Random( 100 ) + 1;
Bilgi.intAlan := Trunc( Bilgi.dblAlan );
Bilgi.strAlan := IntToStr( Bilgi.intAlan );
Memo1.Lines.Add(
Format('Eklenen: %s - %d - %f ' ,[ Bilgi.strAlan, Bilgi.intAlan, Bilgi.dblAlan ])
);
if NOT Assigned(aBilgiler)
then aBilgiler := tBilgiClass.Create;
aBilgiler.Add( Bilgi );
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Text := aBilgiler.ToJSON;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Assigned( aBilgiler ) then aBilgiler.Free;
end;