Publicaciones recientes:
Respuestas recientes:

Hola Kurro,

Sí, como dices es probable que tenga que ver con la versión, además la función ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject() utiliza internamente el deprecado %zen.ProxyObject y es probable que el comportamiento haya sufrido correcciones desde entonces.

En cualquier caso, si te encuentras a veces restringido por la versión que utilizas y necesitas realizar mapeos a mano (simples) de propiedades puedes apoyarte en métodos generados.

Por ejemplo, esta clase provee un método generado - muy simple - para tener un CopyProperties que puedas invocar y copie las propiedades.

/// Clase auxiliar para copiar propiedades de objetos que tengan el mismo nombre
Class MyMsg.ObjCopy Extends %RegisteredObject
{

/// Método generado que copia las propiedades (con el mismo nombre) de un objeto en el actual
/// -obj: objeto del cual se quieren copiar las propiedades  
Method CopyProperties(ByRef obj) As %Status [ CodeMode = objectgenerator ]
{
    set properties = %compiledclass.Properties
    for i=1:1:properties.Count() {
        #dim prop As %Dictionary.CompiledProperty = properties.GetAt(i)
        if prop.Name'="",prop.Name'["%" {
            set propName = prop.Name
            if prop.Name["_" { 
                set propName = """"_prop.Name_""""
            }

            // set ..x = obj.x
            do %code.WriteLine(" set .."_propName _"=obj."_propName)
        }
    }
    quit 1
}

}

Por lo que en tu clase MyMsg.PartialJson sólo necesitas cambiar la herencia:

Class MyMsg.PartialJson Extends (Ens.Response, ObjCopy)

Y a continuación, puedes invocarlo de la siguiente manera para que te copie las propiedades (parciales) de %DynamicObject:

    set partialJsonObj = ##class(MyMsg.PartialJson).%New()
    do partialJsonObj.CopyProperties(objJson.returnValue.data)
    write !!,"** partialJsonObj (copied):",!
    zw partialJsonObj

Hola Kurro,

¿En qué versión lo estás probando? Me imagino que no puedes utilizar %JSON.Adaptor.

En cualquier caso, lo acabo de probar en un irishealth-community:2020.3.0.221.0 y parece que funciona:

Class MyMsg.PartialJson Extends Ens.Response
{

Property "ext_customer_id" As %String(MAXLEN = 1024);

Property "customer_name" As %String(MAXLEN = 1024);

Property "customer_surname_1" As %String(MAXLEN = 1024);

Property "customer_surname_2" As %String(MAXLEN = 1024);

Property "passport_id" As %String(MAXLEN = 250);

Property dob As %String(MAXLEN = 20);

Property sex As %String(MAXLEN = 10);

Property email As %String(MAXLEN = 1024);

Property active As %Boolean;

ClassMethod Test()
{
    set file = ##class(%Stream.FileCharacter).%New()
    set file.Filename = "/test/data.json"
    set data = file.Read()
    set objJson = ##CLASS(%DynamicObject).%FromJSON(data)
    set jsonReturnValue = objJson.returnValue.data.%ToJSON()
    write !!,"** jsonReturnValue:",!,jsonReturnValue

    set sc = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(jsonReturnValue, "MyMsg.PartialJson", .pResponse)
    write !!,"** %ConvertJSONToObject: ",!,sc

    write !!,"** Converted object:",!
    zw pResponse
}

Y el resultado de llamar al método de prueba:

USER>do ##class(MyMsg.PartialJson).Test()


** jsonReturnValue:
{"ext_customer_id":"123456789","customer_name":"FRANCISCO","customer_surname_1":"LOPEZ","customer_surname_2":"DE LAS HERAS","passport_id":"123456ZZZ","dob":"1972-02-01","sex":"M","email":"kurro.lopez@gmail.com","active":true}

** %ConvertJSONToObject: 
1

** Converted object:
pResponse=5@MyMsg.PartialJson  ; <OREF>
+----------------- general information ---------------
|      oref value: 5
|      class name: MyMsg.PartialJson
| reference count: 2
+----------------- attribute values ------------------
|       %Concurrency = 1  <Set>
|             active = 1
|      customer_name = "FRANCISCO"
| customer_surname_1 = "LOPEZ"
| customer_surname_2 = "DE LAS HERAS"
|                dob = "1972-02-01"
|              email = "kurro.lopez@gmail.com"
|    ext_customer_id = 123456789
|        passport_id = "123456ZZZ"
|                sex = "M"
+-----------------------------------------------------
Aplicaciones de Open Exchange:
Seguidores:
Siguiendo:
Alberto aún no sigue a nadie.
Insignias de Global Masters: