我的json包含:
{"timeZone": "America/Los_Angeles"}
在许多其他键中,我想将其反序列化为java.util.TimeZone
。 TimeZone
只是我想用这个json实例化的类中的一个字段。
问题是TimeZone
是一个抽象类,应该使用:
public static synchronized TimeZone getTimeZone(String ID) {
return getTimeZone(ID, true);
使用具体类ZoneInfo
进行实例化。但是,反序列化器默认调用TimeZone
的构造函数。所以我得到了:
java.lang.RuntimeException: Failed to invoke public java.util.TimeZone() with no args
我想知道如何配置Gson从上面的json中实例化TimeZone
?
答案 0 :(得分:5)
您需要创建类似Gson TypeAdapter
的内容并将其注册到您的Gson
实例。
我不确定这对于您的特定数据格式是如何/是否有效,但这是我在我自己的项目中使用的一个示例:
public class TimeZoneAdapter extends TypeAdapter<TimeZone> {
@Override
public void write(JsonWriter out, TimeZone value) throws IOException {
out.value(value.getID());
}
@Override
public TimeZone read(JsonReader in) throws IOException {
return TimeZone.getTimeZone(in.nextString());
}
}
然后在构建Gson
实例时注册它,如下所示:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(TimeZone.class, new TimeZoneAdapter());
Gson gson = builder.create();
希望这有帮助!