ABAP,Java和JavaScript的序列化,反序列化
ABAP
1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_xstring和xml_xstring_to_abap实现两种格式的互换。
REPORT zxm.DATA: ls_abap TYPE zzcrmost__pro001dotproduct1.DATA: ls_line LIKE LINE OF ls_abap-item.ls_line-logsys = 'AG3'.ls_line-object_family = '0401'.ls_line-product_id = 'MCF-0001'.ls_line-product_type = '01'.APPEND ls_line TO ls_abap-item.ls_line-logsys = 'QDD'.ls_line-object_family = '0402'.ls_line-product_id = 'MCF-0002'.ls_line-product_type = '02'.APPEND ls_line TO ls_abap-item.DATA(xml) = cl_proxy_xml_transform=>abap_to_xml_xstring( EXPORTING abap_data = ls_abap ddic_type = 'ZZCRMOST__PRO001DOTPRODUCT1' ).DATA: ls_abap2 LIKE ls_abap,ls_abap3 LIKE ls_abap.cl_proxy_xml_transform=>xml_xstring_to_abap( EXPORTING ddic_type = 'ZZCRMOST__PRO001DOTPRODUCT1' xml = xml IMPORTING abap_data = ls_abap2 ).ASSERT ls_abap2 = ls_abap.
最后一行的ASSERT语句,说明从ABAP格式转换成XML格式,再转换成ABAP格式,转换前的ABAP数据和转换后的ABAP数据是完全相同的。
如果我们单步调试工具类cl_proxy_xml_transform,发现它也没有神奇之处,
内部生成了一个ABAP simple transformation,以此来实现ABAP和XML格式的互相转换。
在调试器里记录下这个生成的transformation ID,然后用事务码STRANS打开,就可以看到明细了。
2. 有了方法1单步调试发现simple transformation的提示,我们可以用另一种更简单的办法实现两种格式的互换,即直接调用simple transformation:
DATA: lv_xml TYPE string.
CALL TRANSFORMATION id SOURCE b = ls_abap RESULT XML lv_xml.
生成的XML的根节点名称为b,因为上面代码调用参数SOURCE,将ABAP变量ls_abap传入时,绑定的参数名为“b”。
CALL TRANSFORMATION id SOURCE XML lv_xml RESULT b = ls_abap3.
ASSERT ls_abap2 = ls_abap3. 用这种方式进行ABAP->XML->ABAP仍然能得到最初的ABAP变量的值。
Java
定义一个简单的Employee类。
注意第12行代码,gender字段前面的关键字:transient。意思是告诉Java序列化框架,在序列化和反序列化时,不要考虑该gender字段。
第12行的代码将Employee类的实例,jerry写入了文件tempFile中。
将文件中的内容还原成对象实例:
打印输出:
Set id called: I042416
Employee {name='Jerry Wang', id=I042416, gender=male, birthday=Tue Aug 07 14:24:51 CST 2018}
Employee {name='Jerry Wang', id=I042416, gender=null, birthday=Tue Aug 07 14:24:51 CST 2018}
可以看到将原始对象实例序列化成文件,再反序列化成对象实例后,两个实例的内容除了gender字段因为刻意被忽略后,其他字段的值都相同。然而两个对象实例的地址已经在序列化前后已经发生了变化。
JavaScript
将JSON对象序列化成JSON字符串: JSON.stringify
var a = { "name": "Jerry", "skill": "Java" };var b = JSON.stringify(a);
将JSON字符串反序列化成JSON对象:
var c = JSON.parse(b);
同Java一样,通过反序列化再序列化后得到的对象地址同原始对象不同。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
ABAP,Java和JavaScript的序列化,反序列化相关推荐
- ABAP, Java和JavaScript三种语言的比较
写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...
- Jerry的ABAP, Java和JavaScript乱炖
写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...
- java Serializable和Externalizable序列化反序列化详解--转
一.什么是序列化? "对象序列化"(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字 ...
- abap java_ABAP,Java和JavaScript的序列化,反序列化
ABAP 1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_xstring和xml_xstring_to_abap实现两种格式的互换. ...
- java 之持久化和序列化(反序列化)
1.什么是序列化和反序列化? Seriallization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 2.什么情况下 ...
- 你真的会用ABAP, Java和JavaScript里的constructor么?
如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现? ...
- 2.JAVA自带的序列化反序列化机制
- 【Java】用Jackson进行JSON序列化/反序列化操作
Java类和JSON Speaker类: import java.util.ArrayList; import java.util.Arrays; import java.util.List;publ ...
- Java 序列化反序列化框架比较
文章目录 一.简介 二.序列化框架 1.JDK 2.XML序列化 3.JSON序列化 4.Hessian 5.Avro序列化 6.Kyro序列化 7.Protostuff 三.序列化框架对比测试 1. ...
最新文章
- 关于当前所用的MVP架构的所思所想
- 基于simulink的QAM-WIMAX的系统仿真
- 操作系统实验1—实现单处理机下的进程调度程序
- 每日一笑 | 在地铁上被老奶奶让座是一种什么样的体验?
- 数据链路层中的LLC
- DWA泊车算法的实现
- 情人节,怎么同时约会女神和女朋友
- 正则表达式系统教程.CHM
- 微信公开课讲师王泓渊:小游戏开放能力
- QT 播放器之VideoWidget
- 深度学习教程(1) | 深度学习概论(吴恩达·完整版)
- Python报错AssertionError: can only test a child process
- VC编程中,判断野指针
- Android获取地理坐标,Android 通过经纬度获取地理位置信息
- 编程语言c语言程序包括的几种语句
- 深度学习要多深,才能读懂人话?|阿里小蜜前沿探索
- 记一次Maximo移动端app报错的原因
- 循序搜寻法(使用卫兵)
- Day08_vant实现_网易云音乐案例
- 生活质量衡量系统_「电力闲聊」电能质量中的电压质量,有四个衡量指标
热门文章
- [汇编语言]-第十章 ret,retf,call指令
- Java学习之日期学习
- COJ1005(Binary Search Tree analog)
- 养成一个SQL好习惯带来一笔大财富
- 电脑开机进入桌面很慢的解决办法
- CAD 2021安装教程(超简单)
- matlab碎纸拼接相似函数,基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法
- windows下的守护进程C++
- VC环境下的静态库(lib)使用和动态库(Dll)的使用(清晰版)
- c++ 中pair类模板的用法详解