点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我创建了一个类(让它称为...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供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
你好迈克尔,
使用CALL TRANSFORMATION时,私有属性没有问题。 它与我使用的/ui2/cl_json序列化程序有关。 为了更清楚一点,我做了以下超级例子:
示例class1的代码。 该类的结构很小,保留了class2的对象引用。 这两种方法将此结构序列化为JSON字符串。 一种方法是使用ui2序列化程序,另一种方法是使用调用转换。 在第二课中,我添加了两个带有默认值的字符串属性,以查看每种情况下会发生什么(请参见下面的第二课代码)。
第2类代码:
我的小型Testclass的编码:
tm_serialize_ui2的输出:
仅引用对象的公共属性被序列化。
tm_serialize_call_trans的输出:
这两个属性都已序列化。 但我的问题是,我不能使用呼叫转换,因为此"%heap"部分生成的格式不符合我的需求。/ui2/序列化器产生的格式正是我所需要的。 但是这里我有私有或受保护的属性的问题。 此刻,我将它们公开。 但是我想要的是使它们受到保护,并使用适当的setter和getter方法来处理它们。 我只想对序列化的内容和非序列化的内容进行更多控制。 也许像属性注释这样的东西将被序列化? 对于某些序列化程序,这就是在C#世界中可以做到的方式。
谢谢,Stefan一周热门 更多>