• bson(json)序列还原


    bson(json)序列还原

    unit Unit2;
    
    interface
    
    uses
      Grijjy.Bson.Serialization, Grijjy.Bson,
      Grijjy.Bson.IO, Winapi.Windows, Winapi.Messages, System.SysUtils,
      System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms,
      Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TTest = record
        public
          id: Integer;
          name: TBytes;
        end;
    
      TForm2 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Memo1: TMemo;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form2: TForm2;
    
    implementation
    
    {$R *.dfm}
    
    var
      Bson: TBytes;
      json: string;
    
    procedure TForm2.Button1Click(Sender: TObject);
    //bson write
    begin
      var w: IgoBsonWriter := TgoBsonWriter.Create;
      w.WriteStartDocument;
      w.WriteInt32('int', 2);
      w.WriteString('str', '中国');
      w.WriteEndDocument;
      Bson := w.ToBson;
    end;
    
    procedure TForm2.Button2Click(Sender: TObject);
    //bson read
    begin
      Memo1.Clear;
      var r: IgoBsonReader := TgoBsonReader.Create(Bson);
      r.ReadStartDocument;
      Memo1.Lines.Add(r.ReadName);
      Memo1.Lines.Add(r.ReadInt32.ToString);
      Memo1.Lines.Add(r.ReadName);
      Memo1.Lines.Add(r.ReadString);
      r.ReadEndDocument;
    end;
    
    procedure TForm2.Button3Click(Sender: TObject);
    //json write
    begin
      var w: IgoJsonWriter := TgoJsonWriter.Create;
      w.WriteStartDocument;
      w.WriteInt32('int', 2);
      w.WriteString('str', '中国');
      w.WriteEndDocument;
      json := w.ToJson;
      Memo1.Text := json;  //{ "int" : 2, "str" : "u4e2du56fd" }
    end;
    
    procedure TForm2.Button4Click(Sender: TObject);
    //json read
    begin
      Memo1.Clear;
      var r: IgoJsonReader := TgoJsonReader.Create(json);
      r.ReadStartDocument;
      Memo1.Lines.Add(r.ReadName);
      Memo1.Lines.Add(r.ReadInt32.ToString);
      Memo1.Lines.Add(r.ReadName);
      Memo1.Lines.Add(r.ReadString);
      r.ReadEndDocument;
    end;
    
    procedure TForm2.Button5Click(Sender: TObject);
    //record序列为bson(json)
    begin
      var rec: TTest;
      rec.id := 2;
      rec.name := BytesOf('中国');
      TgoBsonSerializer.Serialize(rec, Bson);        //bson
     // TgoBsonSerializer.Serialize(rec, json);      //json
    end;
    
    procedure TForm2.Button6Click(Sender: TObject);
    //bson(json)还原为record
    begin
      Memo1.Clear;
      var rec: TTest;
      TgoBsonSerializer.Deserialize(Bson, rec);   //bson
     // TgoBsonSerializer.Deserialize(json, rec); //json
      Memo1.Lines.Add(rec.id.ToString);
      Memo1.Lines.Add(StringOf(rec.name));
    end;
    
    procedure TForm2.Button7Click(Sender: TObject);
    begin
      var w: TgoBsonDocument := TgoBsonDocument.Create;
      w.Add('int', 2);
      w.Add('str', '中国');
      w.Add('bytes', bytesof('汉字'));
      Bson := w.ToBson;    //bson
    //  json := w.ToJson;  //json
    end;
    
    procedure TForm2.Button8Click(Sender: TObject);
    begin
      Memo1.Clear;
      var r: TgoBsonDocument;
      r := r.Load(Bson);   //bson
    //  r.TryParse(json, r); //json
      Memo1.Lines.Add(r.ValuesByName['int'].AsInteger.ToString);
      Memo1.Lines.Add(r.ValuesByName['str'].AsString);
      Memo1.Lines.Add(StringOf(r.ValuesByName['bytes'].AsByteArray));
    end;
    
    end.
    

      

  • 相关阅读:
    MySQL学习笔记:repeat、loop循环
    链表//相交链表
    单位和值
    链表//环形链表 II
    css样式设置小技巧
    链表//环形链表
    CSS代码缩写,占用更少的带宽
    CSS布局模型
    CSS盒模型
    CSS格式化排版
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/14210652.html
Copyright © 2020-2023  润新知