clientdataset(fdmemtable).delta(data)序列為JSON
clientdataset和fdmemtable,都是DELPHI官方提供的內存表控件,許多的3層客戶端都使用它們作數據集,因為3層客戶端需要內存表數據集。
clientdataset的時代,REST API尚不流行。因此clientdataset只支持序列為二進制和XML,不支持序列為JSON。
firedac fdmemtable出來的時候,提倡物聯網時代,REST API已經開始大行,因此fdmemtable支持序列為二進制、XML和JSON。
但是fdmemtable自帶方法序列出來的JSON,非常不友好,一點兒都不人性。如果使用fdmemtable自帶方法序列出的JSON,進行跨平台(語言)之間進行REST API對接,
據說是會被對方罵的。
鑒於此,詠南封裝了clientdataset(fdmemtable).data序列為JSON,clientdataset(fdmemtable).delta序列為JSON的方法,使clientdataset和fdmemtable序列出來的JSON是一樣的。
帶來的好處是,使DELPHI最常用的二種內存表數據集,可以真正方便地同其他開發語言通過REST API進行三方對接,從而真正實現跨平台、跨設備之間進行互聯的物聯網初衷。
delta序列為json:
新增、修改和刪除后的數據都會序列為JSON。
data序列為json
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;