Gson 在解析 Joda DateTime 对象时省略小时数
Gson omits hours when parsing Joda DateTime object
我从服务器收到的对象中有一个 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 字符串时使用的方法(另一方面,在 gson.fromJson()
上使用 gson.fromJson()
时调用 deserialize
字符串).
这是自定义类型适配器:
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));
}
}
知道为什么要这样解析以及如何解决这个问题吗?谢谢!
如评论中所述,我使用的是 ISODateTimeFormat.date()
而不是 ISODateTimeFormat.dateTime()
。
我从服务器收到的对象中有一个 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 字符串时使用的方法(另一方面,在 gson.fromJson()
上使用 gson.fromJson()
时调用 deserialize
字符串).
这是自定义类型适配器:
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));
}
}
知道为什么要这样解析以及如何解决这个问题吗?谢谢!
如评论中所述,我使用的是 ISODateTimeFormat.date()
而不是 ISODateTimeFormat.dateTime()
。