Java Gson:将Json反序列化为抽象类
我的json包含:Java Gson:将Json反序列化为抽象类,java,json,Java,Json,我的json包含: {"timeZone": "America/Los_Angeles"} 在许多其他键中,我想将其反序列化为java.util.TimeZoneTimeZone只是我想用这个json实例化的类中的一个字段 问题在于,TimeZone是一个抽象类,应该用以下内容实例化: public static synchronized TimeZone getTimeZone(String ID) { return getTimeZone(ID, true); 它使用一个
{"timeZone": "America/Los_Angeles"}
在许多其他键中,我想将其反序列化为java.util.TimeZone
TimeZone
只是我想用这个json实例化的类中的一个字段
问题在于,TimeZone
是一个抽象类,应该用以下内容实例化:
public static synchronized TimeZone getTimeZone(String ID) {
return getTimeZone(ID, true);
它使用一个具体的类ZoneInfo
来实例化。但是,默认情况下,反序列化程序调用时区的构造函数。所以我得到:
java.lang.RuntimeException: Failed to invoke public java.util.TimeZone() with no args
我想知道如何配置Gson来从上面的json实例化一个时区
?您需要创建一个类似于GsonTypeAdapter的东西
,并将其注册到您的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());
}
}
希望这有帮助 您是否尝试过使用SimpleTimeZone之类的非抽象类?我敢说这是不可能的。序列化程序需要实例化以生成输出值,抽象类无法实例化。@JAVAC来自库类,很遗憾,我无法更改它。@FeType但是ZoneInfo
扩展了TimeZone
,我只想在TimeZone
中调用正确的方法来获取实例,这是一个时区。创建一个空的非抽象类,扩展要反序列化的抽象类,然后反序列化到其中。
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(TimeZone.class, new TimeZoneAdapter());
Gson gson = builder.create();