博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TDBXJSONStream(BERLIN新增)的使用
阅读量:6223 次
发布时间:2019-06-21

本文共 2004 字,大约阅读时间需要 6 分钟。

DELPHI 10.1 BERLIN新增TDBXJSONStream类,用于方便地将数据序列为JSON,和将JSON还原出来数据。

DATASNAP远程方法也相应地增加了支持返回TDBXJSONStream。必须引用 Data.DBXCommon单元。

url rest方式呼叫远程方法,直接返回JSON数据。

易博龙关于它有这么一段注释:

A TDBXJSONStream type may be used as a parameter or return value in server methods.

Use this type to pass a JSON stream between DataSnap servers and clients.
A TDBXJSONStream is either writable or readable, but not both.
IN parameters are used to pass a readable TDBXJSONStream to a server method.
OUT parameters and return values are used to pass a TDBXJSONStream that the server method has written.

下面的代码仅供语法演示,无任何实际意义。

服务端代码:

function TServerMethods1.QuerySql4(const accountNo, sql: string): TDBXJSONStream;

var

d: TfrmDB;

procedure WritePair(const sProperty, sFieldName, sFieldValue: string);

begin
Result.Writer.WritePropertyName(sProperty);
Result.Writer.WriteValue(sFieldValue);
end;

begin

Result := nil;
if (accountNo = '') or (sql = '') then
Exit;
d := GetDBPool(accountNo).Lock;
if not Assigned(d) then
Exit;
try
d.qryOpen.Close;
d.qryOpen.sql.Clear;
d.qryOpen.sql.Text := sql;
d.qryOpen.Open;
Result := TDBXJSONStream.Create;
Result.Writer.WriteStartArray;
try
while not d.qryOpen.Eof do
begin
try
Result.Writer.WriteStartObject;
// WritePair();

finally

Result.Writer.WriteEndObject;
d.qryOpen.Next;
end;
end;
finally
Result.Writer.WriteEndArray;
Result.Writer.Close;
end;
finally
d.qryOpen.Close;
GetDBPool(accountNo).Unlock(d);
end;
end;

客户端代码:

procedure TForm5.Button1Click(Sender: TObject);

var
aServer : TServerMethods1Client;
js : TDBXJSONStream;
begin
aServer := TServerMethods1Client.Create(Self.SQLConnection1.DBXConnection);
try
js := aServer.QueryHotel(Edit1.Text);
js.Reader.Rewind;
while (js.Reader.Read) do
begin
case js.Reader.TokenType of
TJsonToken.StartArray:
begin
while (js.Reader.Read) do
begin
case js.Reader.TokenType of
TJsonToken.PropertyName:
begin
ListView1.Items.Add.Text := js.Reader.Value.ToString + ': ' + js.Reader.ReadAsString;
end;
end;
end;
end;
end;
end;
finally
aServer.Free;
end;
end;

 

转载地址:http://tnrja.baihongyu.com/

你可能感兴趣的文章
【快学SpringBoot】过滤XSS脚本攻击(包括json格式)
查看>>
C# this.Invoke和this.BeginInvoke 最简单的写法
查看>>
第十一周项目3-点类派生直线类
查看>>
微信H5页面 会被软键盘顶起来
查看>>
ajax post提交到SpringMVC的Controller并将处理结果传递到前台输出总结(6)-- springmvc 控制器获取参数的几种方式...
查看>>
通用类 ControlHelper 获取、绑定、校验控件值的操作方法类
查看>>
今天的移动支付,还是很不安全[转]
查看>>
1174:大整数乘法
查看>>
为什么wait()方法要放在同步块
查看>>
vue中v-for索引不要用key
查看>>
触发器基本使用
查看>>
UIWebView与js那些事
查看>>
HK&&CC JS学习:第一周——NO.2this
查看>>
《Android深度探索》(卷1)HAL与驱动开发 第二章心得体会
查看>>
请借助Array内置对象的相关方法,实现字符串倒序排列
查看>>
第一篇:GCD多线程的概念
查看>>
【转】jQuery获取Select选择的Text和 Value
查看>>
版本控制-git(二)
查看>>
char、varchar、nchar、nvarchar的区别
查看>>
解析函数论 Page 8 $f(x)$在$x_0$处解析的充要条件
查看>>