zoukankan      html  css  js  c++  java
  • datasnap服务端与客户端的对象传递

            datasnap 2010 利用JSON序列化和反序列化任何类型的对象       

            分类:            midas

    先简单介绍下什么叫marshalling? marshalling有点类似于序列化,它指的是一个转换的过程。将一个对象用一种适当的数据格式保存或转换。它一般用于不同两个程序间的通信和数据交换。与之对应的Unmarshalling故名思意也就是类似于反序列化的过程。     

      那么2010中是如何支持Marshalling 的呢?举个小例子说明:

    第一步:创建一个自定义的类    

          TPerson = class     

               FirstName: String;   

                LastName: String;     

               Age: Integer;         

       end;

    我们创建了一个简单的类,里面只有几个简单类型的field

    第二步:marshalling这个Person类的实例

    procedure TForm1.Button1Click(Sender: TObject);
    var  
    Mar: TJSONMarshal; //序列化对象
    UnMar: TJSONUnMarshal; // 反序列化对象  
    person: TPerson; //我们自定义的对象  
    SerializedPerson: TJSONObject; //Json对象
    begin
      Mar := TJSONMarshal.Create(TJSONConverter.Create);  
      try  
         person := TPerson.Create;    
        try
          person.FirstName := 'Nan';  
          person.LastName := 'Dong';    
          person.Age := 29;      
          SerializedPerson := Mar.Marshal(person) as TJSONObject;     
    finally      
       FreeAndNil(person);    
    end;  
    finally    
    Mar.Free;  
    end;   // show一下person的json对象的信息   ShowMessage(SerializedPerson.ToString); 我们可以看到显示的信息中包含了该对象所属的类信息,ID,以及包含的fields。这时person对象已经转化为一个json对象SerializedPerson,这个json对象是完全语言无关,平台无关的。

    第三步:Unmarshalling SerializedPerson

      //UnMarshalling  
       UnMar := TJSONUnMarshal.Create;  
        try    
         person := UnMar.UnMarshal(SerializedPerson) as TPerson;    
        try       // 我们用断言检查一下,unmarshal后的信息完全正确。  
          Assert(person.FirstName = 'Nan');      
          Assert(person.LastName = 'Dong');      
          Assert(person.Age = 29);    
    finally      
        person.Free;    
    end;  
    finally   
       UnMar.Free;  
    end;

    以上的实例用到了 DBXJSONReflect, DBXJSON两个单元。有兴趣的朋友可以钻研下。另外,我只是举了一个简单类型的例子,当然也可以是复杂类型或自定义类型的marshal,有兴趣的朋友试一下。总之,Delphi2010的这个新特性为我们以后的开发带来了许多便利。

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/HuiLove/p/3952632.html
Copyright © 2011-2022 走看看