Java / GSON – Serializing and Deserializing Generic Types

gson - json

Quando você chama .toJson(obj) o Gson internamente usa obj.getClass() para obter informações sobre os campos para serializar. Da mesma forma na deserialização se passa MyClass.class no método fromJson(json, MyClass.class). Isso funciona bem se o objeto é um tipo não-genérico. No entanto, se o objeto é de um tipo genérico as informações são perdida porcausa da sua generalização. Segue um exemplo:

class Foo<T> {
  T value;
}

Gson gson = new Gson();

Foo<Bar> foo = new Foo<Bar>();
// Não pode serializar foo.value corretamente:
gson.toJson(foo);
// Falha ao deserializar foo.value as Bar:
gson.fromJson(json, foo.getClass()); 

O código acima não consegue interpretar  o valor como um tipo Bar porque o Gson invoca list.getClass() para pegar a informação da classe, mas esse método retorna uma classe cru, Foo.class. Isto significa que Gson não têm nenhuma maneira de saber que este é um objeto do tipo Foo <Bar>, e não simplesmente Foo.

Você pode resolver esse problema especificando o tipo correto para o seu tipo genérico. Você pode fazer isso usando a classe TypeToken veja o exemplo:

Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
gson.toJson(foo, fooType);

gson.fromJson(json, fooType);

 

FONTE: https://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-Generic-Types

Help DEV – Analista desenvolvedor Java / Android

http://helpdev.com.br/zarelli

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>