开发者社区> 努力滴码农> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ABAP,Java和JavaScript的序列化,反序列化

简介: 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一样,通过反序列化再序列化后得到的对象地址同原始对象不同。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JAVA的序列化
Java序列化其实这个用的多不多,我觉得看公司的技术栈吧,如果用的是cloud那套,估计接触的会少点,但是也不是说没有,如果是dubbo那套的话,就多点,上次我们说Netty的编码解码的时候说到了谷歌的protoBuf,今天的话我们就来好好看看Java序列化,详细的聊聊
21 0
使用结构化克隆在 JavaScript 中进行深度复制
使用结构化克隆在 JavaScript 中进行深度复制
75 0
JavaScript 专题之函数柯里化
JavaScript 专题系列第十三篇,讲解函数柯里化以及如何实现一个 curry 函数
26 0
javascript教程:实现函数柯里化与反柯里化
下面来一起看看究竟什么是函数柯里化 维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。其由数学家Haskell Brooks Curry提出,并以curry命名。
1264 0
JavaScript实现map
//定义map function Map() { this.container = {}; } //将key-value放入map中 Map.prototype.
594 0
java中的序列化
java中的序列化是一个很有意思的接口,只需要声明而无需做额外的工作,但是在虚拟机内部却做了大量的工作保证了这一特点。只要对象实现了序列化接口,就会把它转换为一个字节序列,当需要的时候能够把这个字节序列完全恢复为原来的对象。
589 0
2689
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载