有人能让Deserializer
工作吗?
我在方法deserialize
中得到了完整的JSON表达式,而不是元素?
public static void main(String[] args) {
GsonBuilder gb = new GsonBuilder();
gb.registerTypeAdapter(DummyObject.class, new JsonSerializer<Date>() {
public JsonElement serialize(Date src, Type typeOfSrc,
JsonSerializationContext context) {
System.out.println("serialize...");
return new JsonPrimitive(DateUtil.toString(src));
}
});
gb.registerTypeAdapter(DummyObject.class, new JsonDeserializer<Date>() {
DateFormat format = DateFormat.getInstance();
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
if (!(json instanceof JsonPrimitive)) {
throw new JsonParseException("The date should be a string value");
}
try {
return format.parse(json.getAsString());
} catch (ParseException e) {
throw new JsonParseException(e);
}
}
});
String jsonExp = "{\"createdDate\":\"2011-12-27T15:21:16\"}";
Gson g = gb.create();
DummyObject tf = g.fromJson(jsonExp, DummyObject.class);
}
3条答案
按热度按时间zqry0prt1#
wqnecbli2#
在这里,自定义的Gson构建器使用JodaTime处理几乎所有的日期模式(如果不想使用它,可以排除它,它只是扩展了可能性)
myss37ts3#
对于原始问题中的代码,无论使用Gson 1.7.1还是Gson 2.0,我得到的都是“线程“main”com.google.gson.JsonParseException中的异常:日期应该是一个字符串值”“。这是我所期望的代码写来做的。
我猜您可能希望为
java.util.Date
而不是DummyObject
注册一个类型适配器。(这会导致不同的错误,但我认为它更接近您试图实现的目标。当然,我对问题/代码的意图进行了一些猜测。)或者,您可能希望沿着以下方式更改反序列化逻辑,并了解到您只希望将JSON的日期部分反序列化为
java.util.Date
。您仍然需要解决(更具体的)日期解析错误。