查看: 47|回复: 0

delphi类(记录)同json互相转换

[复制链接]

1

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2012-3-20
发表于 2021-4-4 15:43:00 | 显示全部楼层 |阅读模式

delphi类(记录)同json互相转换

delphi Tokyo 10.2新增TJsonSerializer类,效率更高更快。

/// <author>cxg 2021-4-4</author>
///Tokyo 10.2新增TJsonSerializer类,效率更高更快。

unit Unit2;

interface

uses
  system.JSON.Serializers,  System.Generics.Collections,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TUser = record
    name: string;
    age: Integer;
  end;

  TPerson = class
  private
    FName: string;
    FAge: Integer;
  public
    constructor Create(const Name: String; Age: Integer);
    property Name: string read FName write FName;
    property Age: Integer read FAge write FAge;
  end;

  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
    persons: TObjectList<TPerson>;
    users: TArray<TUser>;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TPerson }

constructor TPerson.Create(const Name: String; Age: Integer);
begin
  FName := Name;
  FAge := Age;
end;

procedure TForm2.Button1Click(Sender: TObject);
//class2json
begin
  persons := TObjectList<TPerson>.Create;
  persons.Add(TPerson.Create('张三', 40));
  persons.Add(TPerson.Create('李四', 38));
  var serial: TJsonSerializer := TJsonSerializer.Create;
  Memo1.Text := serial.Serialize<TObjectList<TPerson>>(persons);  //{"FOwnsObjects":true,"FListHelper":[{"FName":"张三","FAge":40},{"FName":"李四","FAge":38}],"FComparer":{}}
  serial.Free;
  persons.Free;
end;

procedure TForm2.Button2Click(Sender: TObject);
//json2class
begin
  var serial: TJsonSerializer := TJsonSerializer.Create;
  persons := serial.Deserialize<TObjectList<TPerson>>(Memo1.Text);
  for var person: TPerson in persons do
    Memo1.Lines.Add(person.Name);         //张三  李四
  serial.Free;
  persons.Free;
end;

procedure TForm2.Button3Click(Sender: TObject);
//record2json
begin
  SetLength(users, 2);
  var user: TUser;
  user.name := '王五';
  user.age := 1;
  users[0] := user;
  var user2: TUser;
  user2.name := '赵六';
  user2.age := 2;
  users[1] := user2;
  var serial: TJsonSerializer := TJsonSerializer.Create;
  Memo1.Text := serial.Serialize<TArray<TUser>>(users);    //[{"name":"王五","age":1},{"name":"赵六","age":2}]
  serial.Free;
end;

procedure TForm2.Button4Click(Sender: TObject);
//json2record
begin
  var serial: TJsonSerializer := TJsonSerializer.Create;
  users := serial.Deserialize<TArray<TUser>>(Memo1.Text);
  for var user: TUser in users do
    memo1.Lines.Add(user.name);
  serial.Free;
end;

end.

  

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部