Qual é o propósito básico da @SerializedName
anotação no Android usando Gson?
Dê-me alguns exemplos diferentes. Não consigo entender o propósito principal de usá-lo.
Qual é o propósito básico da @SerializedName
anotação no Android usando Gson?
Dê-me alguns exemplos diferentes. Não consigo entender o propósito principal de usá-lo.
Respostas:
Exemplo de classe Java,
public class Person {
@SerializedName("name")
private String personName;
@SerializedName("bd")
private String birthDate;
}
Esta classe possui dois campos que representam o nome da pessoa e a data de nascimento de uma pessoa. Esses campos são anotados com a anotação @SerializedName . O parâmetro (valor) desta anotação é o nome a ser usado quando serialising
edeserialising
objetos. Por exemplo, o campo Java personName é representado como nome em JSON.
Exemplo JSON,
{
"name":"chintan",
"bd":"01-01-1990"
}
Json
foi útil
Já existem algumas respostas aqui, mas eu gostaria de acrescentar que se você estiver usando ProGuard
para ofuscar seu código e não usar @SerializedName("name")
em sua classe de modelo, seu GSON não funcionará. Devido à ofuscação, os nomes de suas variáveis podem ter mudado de String name
para String a
resultando em análise GSON quebrada, pois GSON irá procurar a chavea
em json e irá falhar.
Ao especificar @SerializedName
, GSON não procurará em json com base no nome da variável e apenas usará o especificado @SerializedName
.
Claro, você pode dizer ao proguard para não ofuscar seu modelo, mas se você gostaria que o modelo fosse ofuscado, você deve especificar @SerializedName
Você pode instruir o Proguard a não ofuscar suas classes de dados, especificando @Keep no topo da classe. Isso não removerá nem ofuscará sua classe. Não há necessidade de adicionar @SerializedName a cada campo explicitamente se o nome do campo for semelhante à chave Json que está sendo usada para ele.