Delphi 如何在DataSnap中跳过JSON编组时的字段序列化?

Delphi 如何在DataSnap中跳过JSON编组时的字段序列化?,delphi,delphi-xe2,datasnap,Delphi,Delphi Xe2,Datasnap,Delphi XE2 DataSnap中是否有跳过JSON编组时字段序列化的通用方法 TBizObjects = class DataObject: TDataObject; -- skip this field on serializaing descendants end; Model = class(TBizObject); 解决方案很简单,但隐藏得很好。对于不希望序列化或反序列化的字段,应将class属性设置为False 假设已声明要封送的以下类: type TPerson

Delphi XE2 DataSnap中是否有跳过JSON编组时字段序列化的通用方法

TBizObjects = class
  DataObject: TDataObject; -- skip this field on serializaing descendants
end;

Model = class(TBizObject);

解决方案很简单,但隐藏得很好。对于不希望序列化或反序列化的字段,应将class属性设置为False

假设已声明要封送的以下类:

type
  TPerson = class
  private
    FName: string;
    FSurname: string;
    FHeight: Integer;
  public
    constructor Create;
    destructor Destroy; override;
  end;
在此声明中,只有
FName
FHeight
将被序列化和反序列化,而
FSurname
将被忽略:

type
  TPerson = class
  private
    FName: string;
    [JSONMarshalled(False)]
    FSurname: string;
    FHeight: Integer;
  public
    constructor Create;
    destructor Destroy; override;
  end;
这里有一些代码可以使用:

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.