datasnap服务端与客户端的对象传递

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

分类:            midas2011-02-04 15:471100人阅读评论(1)收藏举报

json2010marshallingdelphiintegerstring

先简单介绍下什么叫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的这个新特性为我们以后的开发带来了许多便利。

时间: 2024-10-23 13:10:52

datasnap服务端与客户端的对象传递的相关文章

基于SignalR的服务端和客户端通讯处理

SignalR是一个.NET Core/.NET Framework的实时通讯的框架,一般应用在ASP.NET上,当然也可以应用在Winform上实现服务端和客户端的消息通讯,本篇随笔主要基于SignalR的构建一个基于Winform的服务端和客户端的通讯处理案例,介绍其中的处理过程. 1.SignalR基础知识 SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Server Sent Events 和 Long

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

使用Apache CXF开发WebServices服务端、客户端

在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = Celtix + XFire. CXF 继承了 Celtix 和 XFire 两大开源项目的精华, 提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code Fi

java中socket创建服务端与客户端即时对聊

package tool; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; impo

oracle 数据库有服务端和客户端组成

数据库: 基本的概念: 数据库管理系统(Database Management System,DBMS): 管理(存储+操作(CRUD))数据的一个软件系统 关系型数据库管理系统(RDBMS): 数据库(Database):存放数据的磁盘,是RDBMS的一部分 市面上常见的数据库管理系统有哪些? ORACLE, Sql Server, Sqlite(手机数据库), DB2, Access, mysql,sybase,h2... SQL(Structure Query Language)结构化查询

C# Socket服务端与客户端通信(包含大文件的断点传输)

步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送字符串.文件(包含大文件).震动) 二.客户端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送

QTcpSocket-Qt使用Tcp通讯实现服务端和客户端

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QTcpSocket-Qt使用Tcp通讯实现服务端和客户端     本文地址:http://techieliang.com/2017/12/530/ 文章目录 1. 基本功能  1.1. pro文件配置  1.2. QTcpServer服务端建立  1.3. 客户端建立  1.4. 消息收发 2. 其他  2.1. 实现单服务器多客户端通讯  2.2. 关于QTcpServer  2.3.

QUdpSocket-Qt使用Udp通讯实现服务端和客户端

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QUdpSocket-Qt使用Udp通讯实现服务端和客户端     本文地址:http://techieliang.com/2017/12/532/ 文章目录 1. QNetworkDatagram 2. 客户端 3. 服务端 4. 消息收发 1. QNetworkDatagram qt网络报文,可用其建立一个通讯内容包括目标ip.端口号.数据内容.同时接收到的信息也未此类型,可以访问接收数

Unity使用C#实现简单Scoket连接及服务端与客户端通讯

简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [csharp] view plain copyThread connectThread;//当前服务端监听子线程 public string address;//当前地址 public int port;//当前本地端口 TcpClient romoteClient;//远程客户端 // Use t