Herdando da classe JsonObject

Olá estou tentando fazer uma classe nova que herda da classe JsonObject porém no método new se chamo _Super:New() tenho o erro falando que a classe JsonObject não tem o método New o que não condiz com a documentação da própria classe.

Como fazer para conseguir o que preciso?

Boa tarde Vinicius,

A classe JsonObject é um tipo especial, se você reparar, quando você instancia o mesmo, o seu tipo não é um objeto, é um JSON, faça um conout do valtype para verificar isso:


function u_MyJsonObj()
local jJson

jJson := JsonObject():New()

ConOut(ValType(jJson))

return nil

Além disso, ela também tem a questão de trabalhar com colchetes etc.


Se você deseja herdar da mesma, recomendo você optar pelo padrão de composição, veja um exemplo abaixo:


#include "protheus.ch"

class MyJsonObject from longnameclass
    data jJson
    method new()
    method addKey()
    method addValueToKey()
    method toString()
endclass

method new() class MyJsonObject
self:jJson := JsonObject():New()
return self

method addKey(cKey) class MyJsonObject
self:jJson[cKey] := Nil
return nil

method addValueToKey(cKey, xValue) class MyJsonObject
self:jJson[cKey] := xValue
return nil

method toString() class MyJsonObject
return self:jJson:toJson()

function u_MyJsonObj()
local oJson as object

oJson := MyJsonObject():New()

ConOut(ValType(oJson))

oJson:addKey("Xisto")
oJson:addKey("Xpto")

oJson:addValueToKey("Xpto", "=)")

ConOut(oJson:toString())

FreeObj(oJson)

return nil

Você pode expor todos os demais métodos que a JsonObject possui, alterando comportamentos, implementando os seus etc.

ok obrigado quinze caracteres