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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/// <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.

  

posted @   delphi中间件  阅读(1281)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2020-04-04 mormot数据集二进制序列还原
2019-04-04 JSON序列——保存修改数据2
2019-04-04 JSON序列——保存修改数据
2019-04-04 JSON序列——根据JSON生成事务性SQL2
2019-04-04 JSON序列——根据JSON生成事务性SQL
2019-04-04 JSON序列——主从表查询
点击右上角即可分享
微信分享提示