Olá Sijin,
Se deseja usar a transformação de Pascal para underscore, os componentes na estrutura ts_result_payload também devem ter underscores, por exemplo, sales_order em vez de salesorder. O componente __metadata precisa de um underscore adicional devido a uma limitação em nossa implementação, mas suponho que de qualquer forma você não está interessado nos metadados. Se for o caso, basta ignorar o componente e o restante será processado corretamente. Não acredito que o erro de tempo de execução que você viu no sistema tenha algo a ver com a transformação de JSON. Por favor, consulte meu código de exemplo:
METHOD if_oo_adt_classrun~main.
TYPES:
BEGIN OF ts_metadata,
id TYPE string,
uri TYPE string,
type TYPE string,
etag TYPE string,
END OF ts_metadata,
" Se utilizar a transformação de Pascal case para underscore, use underscores nos nomes dos componentes.
BEGIN OF ts_result_payload,
___metadata TYPE ts_metadata,
sales_order TYPE string,
sales_order_type TYPE string,
END OF ts_result_payload,
BEGIN OF ts_a_salesorder_resp,
d TYPE ts_result_payload,
END OF ts_a_salesorder_resp.
DATA ls_a_salesorder_resp TYPE ts_a_salesorder_resp.
DATA(lv_response) = '{' && |\r\n| &&
' "d": {' && |\r\n| &&
' "__metadata": {' && |\r\n| &&
' "id": "someID",' && |\r\n| &&
' "uri": "someURI",' && |\r\n| &&
' "type": "someType",' && |\r\n| &&
' "etag": "someEtag"' && |\r\n| &&
' },' && |\r\n| &&