ورود

View Full Version : حرفه ای: وب سرور با دلفی و خروجی Json برای پلتفرمهایی مانند اندروید



Mask
یک شنبه 03 آبان 1394, 01:27 صبح
سلام.
در حال طراحی وب سروری بودم که چون برای کلاینتش که اندروید بود ، مجبور بودم از فرمت Json استفاده کنم ، هر چی نتو زیرو رو کردم، چیز به درد بخوری پیدا نکردم.
البته بودند کامپوننت و ابزارهایی برای اینکار. که بیشترشون از دلفی های نسخه های بالا پشتیبانی میکردند و به درد من نمیخورد.
اومدمو برا خودم یه کد با حال زدم و خروجی کوئریم رو در قالب جیسون(مزحک) در اوردم.
البته کارم عجله ایه و این کد کارمو راه انداخت. ایشالا دست حاج یوسف خلوت شد ، کمکم میکنه و تبدیلش میکنیم به کامپوننت که مستقیم به دیتا ست وصل بشه و حالشو ببریم.
البته بگم، نیایید بگید فلان کامپوننت و فلان روش بودا:عصبانی++:. میدونم عزیزان:قلب:. حال کردم خودم طراحی کنم:چشمک:
برنامه رو میتونید از این لینک بگیرید. (http://serversazan.com/ftp/Proj-MyJson.rar)
رمزشم هست:
123321Mask

البته اینم بگم که روشی که بنده در این سمپل استفاده کردم ،روشی هست که دست برنامه نویس بازه و حتی میتونه از بیرون بهش مقدار پاس بده.یعنی فیلدهایی که نیازه که ازشون گزارش به فرمت جیسون گرفته بشه، رو میتونید بصورت استرینگ از بیرون برنامه لود کنید.
کد زیر هم روی نسخه دلفی من جواب داد. اما من محدودیت هایی از لحاظ داینامیک بودن، رو درش دیدم که بیخیالش شدم و خودم مجدد چرخ رو به روش خودم اختراع کردم:لبخند:

unit Unit1;

interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBXJSON, DBXJSONReflect;


type
TPerson = class(TObject)
public
Name: String;
Password: String;
Age: Integer;
end;


type
TForm1 = class(TForm)
Button1: TButton;
Memo2: TMemo;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
function ObjectToJSON(AData: TObject): TJSONValue;
function JSONToObject(AJSONValue: TJSONValue): TObject;
{ Public declarations }
end;


var
Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
lPerson: TPerson;
lJSONValue: TJSONValue;
begin
Memo2.Lines.Clear;
lPerson := TPerson.Create;
lPerson.Name := 'Hezihang';
lPerson.Password := '123';
lPerson.Age := 23;


lJSONValue := ObjectToJSON(lPerson);


FreeAndNil(lPerson);
Memo2.Lines.Add(lJSONValue.ToString);
lJSONValue.Free;


end;


procedure TForm1.Button2Click(Sender: TObject);
var
lPerson: TPerson;
lJSONValue: TJSONValue;
begin
Memo1.Clear;
lJSONValue := TJSONObject.ParseJSONValue(Memo2.Text);
lPerson := JSONToObject(lJSONValue) as TPerson;
lJSONValue.Free;
Memo1.Lines.Add('Name: ' + lPerson.Name);
Memo1.Lines.Add('Password: ' + lPerson.Password);
Memo1.Lines.Add('Age: ' + IntToStr(lPerson.Age));
lPerson.Free;
end;


function TForm1.JSONToObject(AJSONValue: TJSONValue): TObject;
var
lUnMarshal: TJSONUnMarshal;
begin
lUnMarshal := TJSONUnMarshal.Create();
try
Result := lUnMarshal.Unmarshal(AJSONValue);
finally
FreeAndNil(lUnMarshal);
end;
end;


function TForm1.ObjectToJSON(AData: TObject): TJSONValue;
var
lMarshal: TJSONMarshal;
begin
lMarshal := TJSONMarshal.Create();
try
Result := lMarshal.Marshal(AData);
finally
FreeAndNil(lMarshal);
end;
end;


end.

rooterror
یک شنبه 03 آبان 1394, 07:26 صبح
ببخشید میتونید یکم در مورد کاربرد جیسون توضیح بدید ؟

تو دلفی برای خروجی اندروید چه کاربردی داره ؟

Mask
یک شنبه 03 آبان 1394, 13:39 عصر
ببخشید میتونید یکم در مورد کاربرد جیسون توضیح بدید ؟

تو دلفی برای خروجی اندروید چه کاربردی داره ؟
یه جستجوی ساده جوابهای خوبی بر میگردونه.
http://www.dotech.ir/ShowNews/28/Json-%DA%86%DB%8C%D8%B3%D8%AA
http://amib.ir/weblog/?p=532
http://rasekhoon.net/forum/thread/33317/page1/

amir_alaki
سه شنبه 19 آبان 1394, 17:49 عصر
با سلام
یه سوال داشتم، شما این خروجی Json رو با چه ابزاری در Android صدا می زنین؟
من با روشی Proxy که خود Delphi Ex4 برای سرور DataSnap جهت MobileConnection میده تست کردم ولی هنوز موفق نشدم، می خواستم بدونم شما از چه روشی استفاده کردین؟
آیا سرورتون Http بود یا TCP ؟

با تشکر

Mask
چهارشنبه 20 آبان 1394, 20:45 عصر
یه سوال داشتم، شما این خروجی Json رو با چه ابزاری در Android صدا می زنین؟
در جاوا شما با گرفتن ارایه ای از JsonObject میتونید مقدار خروجی این وب سرویس رو نمایش بدید


من با روشی Proxy که خود Delphi Ex4 برای سرور DataSnap جهت MobileConnection میده تست کردم ولی هنوز موفق نشدم، می خواستم بدونم شما از چه روشی استفاده کردین؟-

استفاده از روشهایی که در سمپلهای موجود وجود داره برای نسخه های بالای 4 مشکل داره و کاملا غیر منطقی و غیر اصولی است.


آیا سرورتون Http بود یا TCP ؟

به راحتی با یک HTTPServer میتونید یک وب سرور طراحی و با متد Post مقدار ارسال و در یک HTTPClient خروجی مورد نظر با فرمت جیسون رو دریافت کنید.