Firemonkey里结构体json序列化反序列化的方法

5bug 2018-01-27 729人围观 ,发现0个评论 FireMonky跨平台FireMonky序列化反序列化TJsonSerializerSystem.JSON.Serializers

序列化和反序列化的作用这里就不多说了,本文主要演示了在Firemonkey里如何进行结构体的序列化和反序列化的方法,希望对大家有帮助,具体代码如下:

unit Unit11;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox,
  FMX.Memo;

type
  TForm11 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMsgType = (MT_Single, MT_Group);

  TMsgRec = record
    FromID: Integer;
    ToID: Integer;
    Msg: string;
    iType: TMsgType;
  end;

  TTestRec = record
    ID: Integer;
    Name: string;
    Money: Double;
    Groups: TArray<Integer>;
    Msg: TMsgRec;
  end;

var
  Form11: TForm11;

implementation

uses System.JSON, System.JSON.Serializers;
{$R *.fmx}

procedure TForm11.Button1Click(Sender: TObject);
var
  Rec, Rec2: TTestRec;
  I: Integer;
  Serializer, Serializer2: TJsonSerializer;
  JsonStr: string;
begin
  // 结构体赋值
  FillChar(Rec, SizeOf(TTestRec), #0);
  Rec.ID := 1;
  Rec.Name := 'FireMonkey';
  Rec.Money := 9999.99;
  SetLength(Rec.Groups, 3);
  for I := Low(Rec.Groups) to High(Rec.Groups) do
    Rec.Groups[I] := 100 + I;
  Rec.Msg.FromID := 1001;
  Rec.Msg.FromID := 1002;
  Rec.Msg.Msg := '欢迎访问www.xuedelphi.com/www.xuepython.wang';
  Rec.Msg.iType := MT_Group;

  // 序列化为json
  Memo1.Lines.Add('序列化为json:');
  Serializer := TJsonSerializer.Create;
  try
    JsonStr := Serializer.Serialize<TTestRec>(Rec);
    Memo1.Lines.Add(JsonStr);
  finally
    FreeAndNil(Serializer);
  end;
  // 反序列化为结构体
  Memo1.Lines.Add('反序列化为结构体:');
  Serializer2 := TJsonSerializer.Create;
  try
    Rec2 := Serializer2.Deserialize<TTestRec>(JsonStr);
    JsonStr := Serializer2.Serialize<TTestRec>(Rec2);
    Memo1.Lines.Add(JsonStr);
  finally
    FreeAndNil(Serializer2);
  end;
end;

end.

以上代码请在delphi高版本里运行,本人是delphi10.2。运行效果如下图:

不容错过
Powered By Z-BlogPHP