1. ABAP提供了一個工具類cl_proxy_xml_transform,經過它的兩個方法abap_to_xml_xstring和xml_xstring_to_abap實現兩種格式的互換。javascript
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數據是徹底相同的。java
若是咱們單步調試工具類cl_proxy_xml_transform,發現它也沒有神奇之處,框架
內部生成了一個ABAP simple transformation,以此來實現ABAP和XML格式的互相轉換。工具
在調試器裏記錄下這個生成的transformation ID,而後用事務碼STRANS打開,就能夠看到明細了。調試
2. 有了方法1單步調試發現simple transformation的提示,咱們能夠用另外一種更簡單的辦法實現兩種格式的互換,即直接調用simple transformation:code
DATA: lv_xml TYPE string.orm
CALL TRANSFORMATION id SOURCE b = ls_abap RESULT XML lv_xml.xml
生成的XML的根節點名稱爲b,由於上面代碼調用參數SOURCE,將ABAP變量ls_abap傳入時,綁定的參數名爲「b」。對象
CALL TRANSFORMATION id SOURCE XML lv_xml RESULT b = ls_abap3.blog
ASSERT ls_abap2 = ls_abap3. 用這種方式進行ABAP->XML->ABAP仍然能獲得最初的ABAP變量的值。
定義一個簡單的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字段由於刻意被忽略後,其餘字段的值都相同。然而兩個對象實例的地址已經在序列化先後已經發生了變化。
將JSON對象序列化成JSON字符串: JSON.stringify
var a = { "name": "Jerry", "skill": "Java" }; var b = JSON.stringify(a);
將JSON字符串反序列化成JSON對象:
var c = JSON.parse(b);
同Java同樣,經過反序列化再序列化後獲得的對象地址同原始對象不一樣。
要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":