2012-04-10 10 views

答えて

8

解決策は非常に簡単ですが、非常に隠れています。シリアライズまたはデシリアライズしないフィールドの場合は、JSONMarshalledクラス属性をFalseに設定する必要があります。

はあなたがマーシャリングしたい以下のクラス宣言していると想定します。シリアライズされます

type 
    TPerson = class 
    private 
    FName: string; 
    FSurname: string; 
    FHeight: Integer; 
    public 
    constructor Create; 
    destructor Destroy; override; 
    end; 
この宣言で

、唯一FNameFHeightをして、デシリアライズ、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. 
関連する問題