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.

  

  

posted @ 2021-06-07 18:43  delphi中间件  阅读(31)  评论(0)    收藏  举报