资讯专栏INFORMATION COLUMN

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

番茄西红柿 / 636人阅读

摘要:意思是告诉序列化框架,在序列化和反序列化时,不要考虑该字段。然而两个对象实例的地址已经在序列化前后已经发生了变化。将对象序列化成字符串将字符串反序列化成对象同一样,通过反序列化再序列化后得到的对象地址同原始对象不同。

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的原创文章,请关注公众号"汪子熙":

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71951.html

相关文章

  • ABAPJavaJavaScript列化列化

    摘要:意思是告诉序列化框架,在序列化和反序列化时,不要考虑该字段。然而两个对象实例的地址已经在序列化前后已经发生了变化。将对象序列化成字符串将字符串反序列化成对象同一样,通过反序列化再序列化后得到的对象地址同原始对象不同。 ABAP 1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_xstring和xml_xstring_to...

    beita 评论0 收藏0
  • ABAPJava单例模式攻防

    摘要:然而我只需要将这个单例类的构造函数通过反射设置成可以访问,然后就能通过反射调用该构造函数,进而生成新的对象实例。针对这种攻击,一种可行的防御措施是在单例类的构造函数内定义一个布尔变量,初始化为。当构造函数执行后,该变量被置为。 ABAP CLASS zcl_jerry_singleton DEFINITION PUBLIC FINAL CREATE PRIVATE . PUB...

    alanoddsoff 评论0 收藏0
  • JSON数据格式及其在WEB开发中应用

    摘要:是什么是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,是原生格式,这意味着在中处理数据不需要任何特殊的或工具包。底层存储为格式是个构建在之上的新型查询语言。 JSON是什么? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 Java...

    red_bricks 评论0 收藏0
  • 使用Java connector消费ABAP系统函数

    摘要:环境的搭建我的系统有个函数名叫,输入一个和,会输出为这对客户和组合维护的一组和描述信息。测试如下下面是使用消费该函数的代码为简单起见没有使用的库进行的序列化。 Java Connector(JCO)环境的搭建:Step by step to download and configure JCO in your laptop我的ABAP系统有个函数名叫ZDIS_GET_UPSELL_MA...

    褰辩话 评论0 收藏0
  • 那些年我用过SAP IDE

    摘要:本文里提到的所有都是基于版本的,这使得我又一次被鄙视了使用的程序猿鄙视使用的程序猿。因此这些事物码本身也是可以通过进行增强的。 在Google上根据关键字程序员鄙视链搜索,会得到68多万条结果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲琅满目的搜索结果里是众多不同维度划分的鄙视链。 其中有一个维度,...

    denson 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<