Gson – Serializando e Deserializando de forma customizada classes Date

by Jennifer Presant / from beautifuldecay.com

Enquanto desenvolvia um webservice que usava Gson para transformar objetos em Json como formato de às requisições de um aplicativo Android, tive a necessidade de modificar o formato em que ficará objetos da classe java.util.Date após a serialização no webservice e de modificar o formato esperado na deserialização no cliente. Modifiquei os formatos para “yyyy-MM-dd’T’HH:mm:ss” da seguinte forma:

Criei um classe que herde de JsonSerializer no webservice e uma classe que herde de JsonDeserializer no app Android.

public class DateDeserializer implements JsonDeserializer {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
try {
return formatter.parse(element.getAsString());
} catch (ParseException e) {
return null;
}
}
}

public class DateSerializer implements JsonSerializer {
@Override
public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
return context.serialize(formatter.format(date));
}
}

view raw
DateSerializer.java
hosted with ❤ by GitHub

Por fim, em ambos os lados, ao invés de criar uma instância da classe com.google.gson.Gson na forma direta, através de construtor (new Gson()), eu fiz uso do com.google.gson.GsonBuilder , por onde eu informei o JsonDeserializer e o JsonSerializer, dependendo do lado do sistema, como configuração antes do build.

Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer()).create();
Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer()).create();

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s