2012-04-10 7 views
6

क्या डेल्फी XE2 DataSnap में JSON marshalling पर फ़ील्ड क्रमबद्धता को छोड़ने का एक सामान्य तरीका है?डेटा स्नैप में JSON marshalling पर फ़ील्ड क्रमबद्धता को कैसे छोड़ें?

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

Model = class(TBizObject); 

उत्तर

8

समाधान काफी आसान है लेकिन बहुत अच्छी तरह छुपा हुआ है। आपको उन क्षेत्रों के लिए JSONMarshalled वर्ग विशेषता को गलत पर सेट करना चाहिए, जिन्हें आप क्रमबद्ध या deserialize नहीं करना चाहते हैं।

मान लें आप निम्नलिखित वर्ग आप मार्शल करने के लिए चाहते घोषणा की है:

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

इस घोषणा में, केवल FName और FHeight श्रृंखलाबद्ध किया जाएगा और deserialized, 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. 
संबंधित मुद्दे