The solution is quite simple, but very well hidden. You must set the JSONMarshalled
attribute to False for fields that you do not want to serialize or deserialize.
Suppose you declare the following class that you want to marshal:
type TPerson = class private FName: string; FSurname: string; FHeight: Integer; public constructor Create; destructor Destroy; override; end;
In this declaration, only FName
and FHeight
will be serialized and deserialized, FSurname
will be omitted:
type TPerson = class private FName: string; [JSONMarshalled(False)] FSurname: string; FHeight: Integer; public constructor Create; destructor Destroy; override; end;
Here you have the code for the game:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DBXJSON, Data.DBXJSONReflect; type TPerson = class private FName: string; // try to comment and uncomment the following line and see the result [JSONMarshalled(False)] FSurname: string; FHeight: Integer; end; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Person: TPerson; JSONString: string; JSONMarshal: TJSONMarshal; JSONUnMarshal: TJSONUnMarshal; begin JSONMarshal := TJSONMarshal.Create(TJSONConverter.Create); try Person := TPerson.Create; try Person.FName := 'Petra'; Person.FSurname := 'Kvitova'; Person.FHeight := 183; JSONString := JSONMarshal.Marshal(Person).ToString; Memo1.Text := JSONString; finally FreeAndNil(Person); end; finally JSONMarshal.Free; end; JSONUnMarshal := TJSONUnMarshal.Create; try Person := JSONUnMarshal.Unmarshal(TJSONObject.ParseJSONValue(JSONString)) as TPerson; try ShowMessage( 'Name: ' + Person.FName + sLineBreak + 'Surname: ' + Person.FSurname + sLineBreak + 'Height: ' + IntToStr(Person.FHeight) + ' cm' ); finally Person.Free; end; finally JSONUnMarshal.Free; end; end; end.
TLama source share