zoukankan      html  css  js  c++  java
  • 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的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    Git SVN 版本控制 简介 总结 MD
    shape selector 背景 圆形 矩形 圆环 [MD]
    eclipse library jar包 使用总结 MD
    Visitor 访问者模式 [MD]
    BlazeMeter+Jmeter 搭建接口测试框架
    nGrinder 简易使用教程
    65个面试常见问题技巧回答(绝对实用)
    [面试技巧]16个经典面试问题回答思路
    质量模型测试电梯
    linux apache服务器优化建议整理(很实用)
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9821670.html
Copyright © 2011-2022 走看看