裘环有 發表於 2021-4-4 15:43:00

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

<p>delphi类(记录)同json互相转换</p>
<p>delphi Tokyo 10.2新增TJsonSerializer类,效率更高更快。</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">/// &lt;author&gt;cxg 2021-4-4&lt;/author&gt;
///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&lt;TPerson&gt;;
    users: TArray&lt;TUser&gt;;
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&lt;TPerson&gt;.Create;
persons.Add(TPerson.Create('张三', 40));
persons.Add(TPerson.Create('李四', 38));
var serial: TJsonSerializer := TJsonSerializer.Create;
Memo1.Text := serial.Serialize&lt;TObjectList&lt;TPerson&gt;&gt;(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&lt;TObjectList&lt;TPerson&gt;&gt;(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 := user;
var user2: TUser;
user2.name := '赵六';
user2.age := 2;
users := user2;
var serial: TJsonSerializer := TJsonSerializer.Create;
Memo1.Text := serial.Serialize&lt;TArray&lt;TUser&gt;&gt;(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&lt;TArray&lt;TUser&gt;&gt;(Memo1.Text);
for var user: TUser in users do
    memo1.Lines.Add(user.name);
serial.Free;
end;

end.
</pre>
</div>
<p>  </p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/14616324.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/14616324.html
頁: [1]
查看完整版本: delphi类(记录)同json互相转换