Serializing custom object that contains JodaTime objects into JSON Serializing custom object that contains JodaTime objects into JSON json json

Serializing custom object that contains JodaTime objects into JSON


Converters from https://github.com/gkopff/gson-javatime-serialisers are for java.time classes from Java8, e.g. java.time.LocalDate.

But you need converters for org.joda.time classes from 3rd part library. You can create custom converters for it, like:

Converter for org.joda.time.LocalDate

public class LocalDateSerializer implements JsonDeserializer<LocalDate>, JsonSerializer<LocalDate>{   private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.date();   @Override   public LocalDate deserialize(final JsonElement je, final Type type,                           final JsonDeserializationContext jdc) throws JsonParseException   {      final String dateAsString = je.getAsString();      if (dateAsString.length() == 0)      {         return null;      }      else      {         return DATE_FORMAT.parseLocalDate(dateAsString);               }   }   @Override   public JsonElement serialize(final LocalDate src, final Type typeOfSrc,                                final JsonSerializationContext context)   {      String retVal;      if (src == null)      {         retVal = "";      }      else      {         retVal = DATE_FORMAT.print(src);      }      return new JsonPrimitive(retVal);   }}   

Converter for org.joda.time.LocalTime

public class LocalTimeSerializer implements JsonDeserializer<LocalTime>, JsonSerializer<LocalTime>{   private static final DateTimeFormatter TIME_FORMAT = ISODateTimeFormat.timeNoMillis();   @Override   public LocalTime deserialize(final JsonElement je, final Type type,                           final JsonDeserializationContext jdc) throws JsonParseException   {      final String dateAsString = je.getAsString();      if (dateAsString.length() == 0)      {         return null;      }      else      {         return TIME_FORMAT.parseLocalTime(dateAsString);               }   }   @Override   public JsonElement serialize(final LocalTime src, final Type typeOfSrc,                                final JsonSerializationContext context)   {      String retVal;      if (src == null)      {         retVal = "";      }      else      {         retVal = TIME_FORMAT.print(src);      }      return new JsonPrimitive(retVal);   }}  

Usage

public void retrieveGlobalDataFromStorage(Context context){  // ...      final GsonBuilder builder = new GsonBuilder()       .registerTypeAdapter(LocalDate.class, new LocalDateSerializer())       .registerTypeAdapter(LocalTime.class, new LocalTimeSerializer());    final Gson gson = builder.create();  // ...