我从服务器收到的对象中有一个Joda DateTime
字段。例如,字段值为2016-09-01T11:30:00.000+03:00
。然后,在调用gson.toJson()
时,该字段将转换为仅限日期的字符串2016-09-01
。
代码:
final GsonBuilder builder = new GsonBuilder().registerTypeAdapter(DateTime.class, new DateTimeSerializer());
final Gson gson = builder.create();
String str = gson.toJson(response.body());
调试时我注意到我的自定义类型适配器的serialize
方法没有被调用。也许我没有正确理解这一点,但是我希望在将对象转换为JSON字符串时使用该方法(另一方面,在字符串上使用deserialize
时调用gson.fromJson()
)
这是自定义类型适配器:
public class DateTimeSerializer implements JsonDeserializer<DateTime>, JsonSerializer<DateTime>
{
private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.date();
@Override
public DateTime deserialize(final JsonElement je, final Type type, final JsonDeserializationContext jdc) throws JsonParseException {
final String dateAsString = je.getAsString();
return dateAsString.length() == 0 ? null : DATE_FORMAT.parseDateTime(dateAsString);
}
@Override
public JsonElement serialize(final DateTime src, final Type typeOfSrc,
final JsonSerializationContext context) {
return new JsonPrimitive(src == null ? "" : DATE_FORMAT.print(src));
}
}
知道为什么会这样解析以及如何解决这个问题?谢谢!
答案 0 :(得分:0)
正如评论中所述,我使用ISODateTimeFormat.date()
代替ISODateTimeFormat.dateTime()
。