Classe Wrapper JSON não desserialização

Sep 23 2020

Tenho alguns JSON chegando assim (dados removidos por motivos de privacidade.

{"user":{"id":"","email":"","first_name":"","last_name":""}, "STUFF I DONT WANT HERE"}

Eu escrevi uma classe de wrapper interna para ele assim:

    public with sharing class WrapperUserJson {
        public String id;
        public String email;
        public String first_name;
        public String last_name;
    }

Em um método, estou fazendo algo como WrapperUserJson data = (WrapperUserJson)JSON.deserialize(st, WrapperUserJson.class);

Mas sempre retorna nulo. Eu sei que o JSON está sendo passado para ele, então não entendi. o que estou perdendo?

Respostas

1 sfdcfox Sep 23 2020 at 22:03

Você está perdendo o atributo de nível superior user. Você precisa de uma segunda classe de wrapper:

public class WrapperResponseJson {
    WrapperUserJson user;
}
public class WrapperUserJson {
    public String id;
    public String email;
    public String first_name;
    public String last_name;
}

Que você alimenta no método de desserialização:

WrapperResponseJson data = (WrapperResponseJson)JSON.deserialize(st, WrapperResponseJson.class);

Você pode gerar código automaticamente a partir de JSON usando json2apex , uma ótima ferramenta para criar rapidamente Apex a partir de uma determinada fonte JSON.