2017-02-01 11 views
4

Недавно я переключил некоторые из наших сериализаций с Jackson на Gson. Выяснилось, что Джексон сериализует даты с длинными.Как сериализовать Date to long с помощью gson?

Но, по умолчанию Gson сериализует даты по строкам.

Как преобразовать даты в longs при использовании Gson? Благодарю.

ответ

9

Адаптер первого типа выполняет десерилизацию, а второй - сериализацию.

Gson gson = new GsonBuilder() 
     .registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong())) 
     .registerTypeAdapter(Date.class, (JsonSerializer<Date>) (date, type, jsonSerializationContext) -> new JsonPrimitive(date.getTime())) 
     .create(); 

Использование:

String jsonString = gson.toJson(objectWithDate1); 
ClassWithDate objectWithDate2 = gson.fromJson(jsonString, ClassWithDate.class); 
assert objectWithDate1.equals(objectWithDate2); 
+0

Связанные (относительно десериализации): http://stackoverflow.com/a/8960644/435605 –