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的这个新特性为我们以后的开发带来了许多便利。

  • 相关阅读:
    C语言——总结回顾
    C语言——第十四、十五周作业
    题目思路——统计素数并求和
    题目思路——单词长度
    C语言——第七周作业
    C语言——第六周作业
    C语言——第四次作业
    C语言——第三次作业
    C语言——第二次作业
    C语言——第一次作业
  • 原文地址:https://www.cnblogs.com/HuiLove/p/3952632.html
Copyright © 2011-2022 走看看