使用/ui/cl_json和私有或受保护的数据序列化json

2020-08-24 01:00发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我创建了一个类(让它称为...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我创建了一个类(让它称为class1),它带有一些用于私有属性的getter和setter方法。

另一个类(我们称其为class2)具有一个公共属性,该属性在内部表中保存class1的对象引用。

数据:lt_class1_objects引用ZCL_CLASS1的类型标准表。

当我使用以下命令序列化时:

DATA(lv_json)=/ui2/cl_json =>序列化(data = lr_task pretty_name =/ui2/cl_json => pretty_mode-low_case name_mappings = lt_mapping),class2对象的内容未序列化。

是否可以通过某种方式告诉序列化程序要序列化的属性? 当我使用CALL TRANSFORMATION时,私有属性会被序列化,但是在生成的json上还有其他格式问题。

我需要的格式应如下所示:

{

//信息:类2的公共属性(内部表),该属性保存对class1实例的引用

" lt_class2_attr":[

{

" lv_example_attr":"一些示例字符串",

" lv_example_attr2":"另一个字符串"

},

{

" lv_example_attr":"一些示例字符串",

" lv_example_attr2":"另一个字符串"

}

]

}

但是序列化后我得到的是这样的:

{

" lt_class2_attr":[

{

},

{

}

]

}

当我将属性复制/粘贴到公共部分时,它会按预期工作。

我可以公开属性,但是对我来说,二传手和getter的概念还不清楚。

我想念什么吗?

边注:

-"调用转换"存在的问题是,我无法摆脱它作为JSON输出生成的堆引用语法。 因此,创建的JSON格式与上面的示例不同。 与/ui2/cl_json一起使用时,它就像一个符咒,在我需要的low_case中也可以用作pretty_name。 我唯一关心的是,我不理解我必须坚持的课堂设计,它可以正常工作,并尊重我需要输出的方式。

先谢谢您

Stefan

6条回答
DafaDDDa
2020-08-24 01:30 .采纳回答

你好,斯特凡,

如果你是在班级外部进行序列化的,就像迈克尔提到的那样,你只能访问该班级的公共属性。

如果您希望/ui2/cl_json可以序列化所有类型的属性(私有+保护),则需要允许它访问它们。 您可以通过将/ui2/cl_json定义为您的班级朋友来做到这一点。 这样,您就不会破坏对其他类的封装,而是启用/ui2/cl_json访问类的所有数据。

如果您不拥有要序列化的类,则可以继承 并按班级添加好友。 在这种情况下,您至少可以访问受保护的属性。

 CLASS lcl_test定义最终朋友/ui2/cl_json。

   公共部分。
     数据:ID TYPE i。
     数据:儿童lcl_test的标准类型表。

   方法:构造函数。

   受保护的部分。
     数据:prot TYPE i。

   专用部分。
     数据:priv TYPE i。

 ENDCLASS。  

最诚挚的问候,

Alexey。

一周热门 更多>