如何让Genexus暴露的REST服务直接返回干净JSON而非带外层包装?
解决GeneXus REST服务返回JSON被外层变量包裹的问题
核心思路
不要手动将SDT序列化为JSON字符串后作为输出参数,而是让GeneXus直接处理SDT/SDT集合的序列化,同时配置REST服务直接返回该数据结构。
具体步骤
方法一:直接使用SDT集合作为输出(推荐)
- 调整Procedure的输出参数:将原来的字符串类型
JsonClienti替换为你的SDT集合类型(比如你的SDT是Cliente,就设为ClienteCollection)。 - 移除手动序列化代码:删掉Procedure中把SDT集合转成JSON字符串的逻辑,直接将填充好的SDT集合赋值给这个输出参数。
- 配置REST服务响应:
- 右键目标Procedure,选择REST -> Properties
- 切换到Response标签页
- 将
Type设置为你的SDT集合类型,而非默认的Procedure Outputs - 保存配置后重新生成服务,此时调用就会直接返回干净的JSON数组,不会有外层的
jsonClienti包裹。
方法二:使用Raw类型返回(适用于必须用字符串输出的场景)
如果因为业务限制必须用字符串类型存储JSON:
- 确保Procedure中生成的
JsonClienti是标准的JSON字符串(无需额外转义)。 - 配置REST服务响应:
- 打开Procedure的REST属性窗口
- 在Response标签页,将
Type设置为Raw - 设置
Content Type为application/json - 生成服务后,调用时会直接返回
JsonClienti中的JSON内容,不会添加外层包装。
内容的提问来源于stack exchange,提问作者Nicola
相关产品推荐
相关产品推荐

