2012-04-10 18 views

cevap

8

Çözüm oldukça kolaydır ancak çok iyi gizlenmiştir. Serileştirmek veya serileştirmek istemediğiniz alanlar için JSONMarshalled sınıf özniteliğini False olarak ayarlamanız gerekir.

Eğer sıralamakta istediğiniz aşağıdaki sınıf ilan ettiler varsayalım: tefrika edilecek

type 
    TPerson = class 
    private 
    FName: string; 
    FSurname: string; 
    FHeight: Integer; 
    public 
    constructor Create; 
    destructor Destroy; override; 
    end; 
Bu bildiride

, sadece FName ve FHeight ve serileştirilemezse, FSurname atlanır:

type 
    TPerson = class 
    private 
    FName: string; 
    [JSONMarshalled(False)] 
    FSurname: string; 
    FHeight: Integer; 
    public 
    constructor Create; 
    destructor Destroy; override; 
    end; 

Burada oynamak için bazı kodunuz var:

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. 
İlgili konular