Qual é o propósito básico da anotação @SerializedName no Android usando Gson

110

Qual é o propósito básico da @SerializedNameanotação no Android usando Gson?

Dê-me alguns exemplos diferentes. Não consigo entender o propósito principal de usá-lo.

Muhammad Ali
fonte
O que o javadoc diz?
Sotirios Delimanolis
eu não consigo entender o que dizem?
Muhammad Ali
ele irá identificar o identificador de propriedade ao qual esta propriedade pertence a partir dos dados json
Amrut Bidri
1
Você pode ver esta explicação incrível futurestud.io/tutorials/…
Abhishek Kumar

Respostas:

254

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 serialisingedeserialising objetos. Por exemplo, o campo Java personName é representado como nome em JSON.

Exemplo JSON,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Chintan Rathod
fonte
2
@MuhammadAli é um prazer ajudá-lo. Você também pode me dar crédito por voto positivo e aceitar a resposta, minha cara :)
Chintan Rathod
3
Eleitores negativos, por favor, adicionem seu comentário para que eu possa entender o propósito do voto negativo e eu possa melhorar minha resposta em diante .. :)
Chintan Rathod
4
Boa resposta .... Direto ao ponto .... Exemplo com Jsonfoi útil
Devrath
Ainda bem que ajudou. :)
Chintan Rathod
1
Realmente util!! ; Muito obrigado :) @ChintanRathod
Imran
64

Já existem algumas respostas aqui, mas eu gostaria de acrescentar que se você estiver usando ProGuardpara 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 namepara String aresultando 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

Sandip Fichadiya
fonte
1
Gr8 info, eu costumava dizer ao Proguard para não ofuscar os modelos. Agora, com isso eu posso fazer. :)
akashPatra
1
Isto é muito, muito importante. Perdeu 2 horas e adicionou @SerializedName em todos os lugares.
Abhijit Kurane
2

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.

Alankar Gupta
fonte