protobuf orm
protobuf orm
Grijjy.Collections.pas, Grijjy.inc, Grijjy.ProtocolBuffers.pas, Grijjy.SysUtils.pas
主从表序列/还原
创建tables.proto协议文件
// Filename: tables.proto
syntax="proto2";
package tables;
message Goods {
required string goodsid = 1;
required string goodsname = 2;
}
message Units {
required string unitid = 1;
required string unitname = 2;
}
message Tables {
repeated Goods GoodsArr = 1;
repeated Units UnitsArr = 2;
}
//cxg 2021-6-7
unit Unit4;
interface
uses
system.Generics.Collections,
Grijjy.ProtocolBuffers, Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms,
Vcl.Dialogs, Vcl.StdCtrls;
type
TGoods = record
public
[Serialize(1)]
goodsid: string;
[Serialize(2)]
goodsname: string;
end;
TUnits = record
public
[Serialize(1)]
unitid: string;
[Serialize(2)]
unitname: string;
end;
TTables = record
public
[Serialize(1)]
GoodsArr: TArray<TGoods>;
[Serialize(2)]
UnitsArr: TArray<TUnits>;
end;
type
TForm4 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
//序列
var tables: TTables;
SetLength(tables.GoodsArr, 2);
SetLength(tables.UnitsArr, 2);
var i: Integer;
for i := 0 to 1 do
begin
tables.GoodsArr[i].goodsid := '商品id' + i.ToString;
tables.GoodsArr[i].goodsname := '商品名称' + i.ToString;
tables.UnitsArr[i].unitid := '单位id' + i.ToString;
tables.UnitsArr[i].unitname := '单位名称' + i.ToString;
end;
var v: TBytes := TgoProtocolBuffer.Serialize(tables);
//还原
var arr: TTables;
TgoProtocolBuffer.Deserialize(arr, v);
for var g: TGoods in arr.GoodsArr do
begin
Memo1.Lines.Add(g.goodsid);
Memo1.Lines.Add(g.goodsname);
end;
for var u: TUnits in arr.UnitsArr do
begin
Memo1.Lines.Add(u.unitid);
Memo1.Lines.Add(u.unitname);
end;
end;
end.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/14860083.html

浙公网安备 33010602011771号