How to skip field serialization when sorting JSON in DataSnap?

Is there a general way to skip field serialization when sorting JSON in Delphi XE2 DataSnap?

TBizObjects = class DataObject: TDataObject; -- skip this field on serializaing descendants end; Model = class(TBizObject); 
+6
source share
1 answer

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. 
+8
source

Source: https://habr.com/ru/post/912816/


All Articles