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.


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"
}

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.