1

如果我想为一种尚不存在的语言(例如 ABAP)开发序列化程序,那么其中涉及的工作是什么?它是否仅涉及编写 ABAP 序列化程序的“文本等价物” - 我将如何处理复杂的对象。最好的起点是什么?

4

2 回答 2

2

更新:从版本 7.02 和 7.03/7.31(内核补丁 116)开始,ABAP 原生支持 JSON - 查看Horst Keller 的此博客

您应该首先使用 site:sap.com 搜索 ABAP 和 JSON,然后选择一个现有项目来学习和贡献。但是,如果您仍然无法获得 NIH 奖励积分,请确保您知道如何使用泛型类型、字段符号、RTTI 和由内而外的递归,然后练习使用 RTTI 递归地遍历复杂数据结构。完成此操作后,组装任何类型的输出字符串都很容易。

于 2012-06-27T18:48:17.827 回答
2

有一个类可以做到这一点:CL_TREX_JSON_SERIALIZER。唯一没有的(SAP 通过客户消息告诉我他们不会修复它,他们不支持此代码)是将属性放在双引号中。

这很容易通过在 CL_TREX_JSON_SERIALIZER-RECURSE 中添加第 52 行来解决:

CONCATENATE '"' <abapcomp>-name '"' c_colon INTO l_value .

一个示例程序是:

"We are going to serialize an error
DATA: wa_error TYPE bapireturn.
"Reference to the serializer
DATA: cl_serializer TYPE REF TO zcl_trex_json_serializer.
"Final output
DATA: l_json_string TYPE string.

wa_error-type = 'E'.
wa_error-code = 'BC'  .
wa_error-message = 'This will serialize correctly.'.

CREATE OBJECT cl_serializer
  EXPORTING
    DATA = wa_error.

cl_serializer->serialize( ) .
l_json_string = cl_serializer->get_data( ) .
WRITE l_json_string.

我使用 zcl_trex_json_serializer ,它是 cl_trex_json_serializer 的克隆,具有前面提到的修复。此代码将返回:

{"type": "E", "code": "BC", "message": "This will serialize correctly.", 
"log_no": "", "log_msg_no": "000000", "message_v1": "", "message_v2": "", 
"message_v3": "", "message_v4": ""}

我在包含表等的结构上使用了这段代码;代码似乎能够处理这一切。

于 2012-06-28T18:46:17.880 回答