midas支持使用OLEVARIANT序列化对象,最新的DATASNAP支持使用OLEVARAINT和JSON来序列化对象。

下面的代码演示OLEVARINAT序列化TPARAMS, TPARAMETERS对象。OLEVARIANT本质上是一个BYTE数组。

还原TPARAMS对象

procedure VariantToParams(input:OleVariant;par:TParams);
// TParam 's property: fieldType, paramName, ParamType, value, size
// paramType default value ptinput
// size = sizeof(value)
var
  n, i:integer;
begin
  try
    n:=0;
    i:=0;
    par.Clear;
    while VarArrayHighBound(input,1)>=(n+3)do
    begin
      par.CreateParam(TFieldType(input[n+1]),input[n+2],ptInput);
      par.Items[i].Value := input[n+3];
      par.Items[i].Size :=SizeOf(input[n+3]);
      n:=n+3;
      i:=i+1;
    end;
  except
    Exit;
  end;
end;

序列化TPARAMS对象

function ParamsToVariant(par:TParams): OleVariant;
// TParam 's property: fieldType, paramName, ParamType, value, size
// paramType default value ptinput
// size = sizeof(value)
var
  tmpv:OleVariant;
  n,i:integer;
begin
  try
    tmpv:=VarArrayCreate([1,par.Count*3],VarVariant);
    n:=0;
    i:=0;
    while par.Count>i do
    begin
      tmpv[n+1]:=Ord(par.Items[i].DataType);    
      tmpv[n+2]:=par.Items[i].Name;
      tmpv[n+3]:=par.Items[i].Value;
      i:=i+1;
      n:=n+3;
    end;
    result:=tmpv;
  except
    Exit;
  end;
end;

还原TPARAMETERS

procedure VariantToParameters(input:OleVariant;par:TParameters);
// TParameters's property: name, dataType, Direction, size, value
// direction default pdinput
// size = sizeof(value)
var
  n:integer;
begin
  try
    n:=0;
    par.Clear;
    while VarArrayHighBound(input,1)>=(n+3)do
    begin
      par.CreateParameter(input[n+1],tfieldtype(input[n+2]),pdInput,SizeOf(input[n+3]),input[n+3]);
      n:=n+3;
    end;
  Except
    Exit;
  end;
end;

序列TPARAMETERS对象

function ParametersToVariant(par:TParameters): OleVariant;
// TParameters's property: name, dataType, Direction, size, value
// direction default pdinput
// size = sizeof(value)
var
  tmpv:OleVariant;
  n,i:integer;
begin
  try
    tmpv:=VarArrayCreate([1,par.Count*3],VarVariant);
    n:=0;
    i:=0;
    while par.Count>i do
    begin
      tmpv[n+1]:=par.Items[i].Name;
      tmpv[n+2]:=Ord(par.Items[i].DataType);
      tmpv[n+3]:=par.Items[i].Value;
      i:=i+1;
      n:=n+3;
    end;
    result:=tmpv;
  except
    exit;
  end;

oleVariant序列化对象相关推荐

  1. Hessian RPC示例和基于Http请求的Hessian序列化对象传输

    本文主要介绍两个案例,第一个是使用Hessian来实现远程过程调用,第二个是通过Hessian提供的二进制RPC协议进行和Servlet进行数据交互,Hessian本身即是基于Http的RPC实现. ...

  2. Java基础/利用fastjson序列化对象为JSON

    利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...

  3. python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象

    一:dat文件 在我之前的博客中,我介绍了对txt文件操作的一些相关知识,以及如何对其进行读写操作,也介绍了文本文件和二进制文件的一些区别.虽然对txt文件操作已经能够满足储存数据的需求,但txt文件 ...

  4. Dubbo序列化对象

    序列化对象 Dubbo分为服务端,客户端 客户端调用服务,需要将pojo传递给客户端调用者 对象在传输过程中,需要序列化 在表现层,需要反序列化对象 对象序列化 需要实现序列化接口 Pojo里面所有不 ...

  5. python学习-序列化对象(pickle)

    文章目录 序列化(pickle) 序列化(pickle) 序列化对象,引入内置模块: import pickle 序列化写文件使用二进制的方式去写,需要使用wb 我在定义时,类成员变量使用了__修饰, ...

  6. Jquey将序列化对象在前台显示地几种方式

    <1>序列化对象为单个对象的时候 //Student person = new Student() { Name = "张三",Code="001" ...

  7. python self 序列_python中序列化对象

    # 序列化对象p1 import pickle                               # 内置库 class People: def __init__(self, name, a ...

  8. flutter 序列化_如何在Flutter中序列化对象

    flutter 序列化 If you intend to save user data to the shared preferences or local storage in your Flutt ...

  9. javascript对象序列化(对象与JSON字符串的互换)

    前一段时间用到h5的本地存储---需要把某个js对象存储在浏览器的本地存储中,用到了javascript对象的序列化与反序列化 所谓的序列化就是将对象的状态信息转换为可以存储或传输的形式的过程,基本上 ...

最新文章

  1. Android 进程间通信 实例分析
  2. ubuntu登录界面循环登录
  3. WebGL on iOS8 最终等到了这一天
  4. tgz文件linux打开,tgz文件扩展名,tgz文件怎么打开?
  5. java命令主动清空jvm_JVM史上最全实践优化没有之一
  6. 20220202--CTF刷题MISC方向--第7题--编码
  7. linux 自定义vi dd,Vim常用命令及配置方案
  8. 接口测试--测试工具apipost脚本大全
  9. 大麦融入阿里电商平台,杰伦演唱会的票会不会好抢点?
  10. Linux高性能网络:协程系列01-前言
  11. 拉结尔6月21日服务器维护,《拉结尔》6月11日更新公告
  12. ARM开发7.3.3 基础实训( 3 ) 独立式键盘的输入系统设计--LPC21XX
  13. 易语言 使用精易皮肤模块的 方法
  14. python 分词器使用
  15. STM32F4+ESP8266拟辉光钟设计(二)WS2812灯光控制
  16. DS1308 Datasheet
  17. 我的朋友老曹,居然用数据工具搞了这么多事
  18. 【头歌】重生之机器学习-线性回归
  19. 阿里云云计算ACP学习(九)---阿里云安全
  20. 【Leetcode】周赛204 罗布乐思

热门文章

  1. Linux服务器通过rz/sz轻松上传下载文件
  2. 九度 1550 分糖果
  3. 终于把网站最后一个模块了结了
  4. DFS深度优先搜索算法/BFS广度优先搜索算法(c/c++)
  5. linux使用同一密钥对实现互相免密登录
  6. lnmp的搭建及php加速
  7. C++中的位运算和|
  8. .NET大型Web站点StackOverflow架构分析
  9. 网络生活点滴 网络管理实用8招技巧
  10. eigrp 重分布默认路由