clientdataset(fdmemtable).delta(data)序列为JSON
<p>clientdataset(fdmemtable).delta(data)序列为JSON</p><p>clientdataset和fdmemtable,都是DELPHI官方提供的内存表控件,许多的3层客户端都使用它们作数据集,因为3层客户端需要内存表数据集。</p>
<p>clientdataset的时代,REST API尚不流行。因此clientdataset只支持序列为二进制和XML,不支持序列为JSON。</p>
<p>firedac fdmemtable出来的时候,提倡物联网时代,REST API已经开始大行,因此fdmemtable支持序列为二进制、XML和JSON。</p>
<p>但是fdmemtable自带方法序列出来的JSON,非常不友好,一点儿都不人性。如果使用fdmemtable自带方法序列出的JSON,进行跨平台(语言)之间进行REST API对接,</p>
<p>据说是会被对方骂的。</p>
<p>鉴于此,咏南封装了clientdataset(fdmemtable).data序列为JSON,clientdataset(fdmemtable).delta序列为JSON的方法,使clientdataset和fdmemtable序列出来的JSON是一样的。</p>
<p>带来的好处是,使DELPHI最常用的二种内存表数据集,可以真正方便地同其他开发语言通过REST API进行三方对接,从而真正实现跨平台、跨设备之间进行互联的物联网初衷。</p>
<p>delta序列为json:</p>
<p>新增、修改和删除后的数据都会序列为JSON。</p>
<p><img src="https://img2020.cnblogs.com/blog/368779/202003/368779-20200320105304584-1485570965.png"></p>
<p>data序列为json</p>
<p><img src="https://img2020.cnblogs.com/blog/368779/202003/368779-20200320105339417-1115619616.png"></p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Append;
ClientDataSet1['unitid'] := '1';
ClientDataSet1['unitname'] := '个';
ClientDataSet1.Post;
ClientDataSet1.Append;
ClientDataSet1['unitid'] := '2';
ClientDataSet1['unitname'] := '双';
ClientDataSet1.Post;
var jo: TynJsonCross := TynJsonCross.Create;
Memo1.Text := jo.DeltaToJson(ClientDataSet1.Delta, 'tunit', '', 'unitid');
jo.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FDMemTable1.Append;
FDMemTable1['unitid'] := '1';
FDMemTable1['unitname'] := '个';
FDMemTable1.Post;
FDMemTable1.Append;
FDMemTable1['unitid'] := '2';
FDMemTable1['unitname'] := '双';
FDMemTable1.Post;
var jo: TynJsonCross := TynJsonCross.Create;
Memo1.Text := jo.DeltaToJson(FDMemTable1, 'tunit', '', 'unitid');
jo.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientDataSet1.Append;
ClientDataSet1['unitid'] := '1';
ClientDataSet1['unitname'] := '个';
ClientDataSet1.Post;
ClientDataSet1.Append;
ClientDataSet1['unitid'] := '2';
ClientDataSet1['unitname'] := '双';
ClientDataSet1.Post;
var jo: TynJsonCross := TynJsonCross.Create;
Memo1.Text := jo.DataSetToJson(ClientDataSet1);
jo.Free;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
FDMemTable1.Append;
FDMemTable1['unitid'] := '1';
FDMemTable1['unitname'] := '个';
FDMemTable1.Post;
FDMemTable1.Append;
FDMemTable1['unitid'] := '2';
FDMemTable1['unitname'] := '双';
FDMemTable1.Post;
var jo: TynJsonCross := TynJsonCross.Create;
Memo1.Text := jo.DataSetToJson(FDMemTable1);
jo.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.CreateDataSet;
FDMemTable1.CreateDataSet;
FDMemTable1.CachedUpdates := True;
end;
</pre>
</div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/12530299.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/12530299.html
頁:
[1]