【发布时间】:2015-11-04 06:28:01
【问题描述】:
我有一个界面
public interace ABC {
}
这个的实现如下:
public class XYZ implements ABC {
private Map<String, String> mapValue;
public void setMapValue( Map<String, String> mapValue) {
this.mapValue = mapValue;
}
public Map<String, String> getMapValue() {
return this.mapValue
}
}
我想反序列化一个使用 Gson 实现的类
public class UVW {
ABC abcObject;
}
当我尝试像 gson.fromJson(jsonString, UVW.class); 那样反序列化它时,它返回给我 null。 jsonString 是 UTF_8 字符串。
是因为UVW类中使用的接口吗?如果是,我该如何反序列化此类?
【问题讨论】:
-
只给
ABC类型的字段,Gson怎么知道如何反序列化JSON? -
如何让 Gson 知道使用 ABC 的实现 XYZ?
-
我不相信 Gson 有这样的内置功能(多态反序列化)。您需要编写一个自定义反序列化器,从 JSON 中获取某种提示以了解如何反序列化它。看看杰克逊。它内置了这个功能。
-
@SotiriosDelimanolis 这个问题已经过时了。他建议使用
RuntimeTypeAdapterFactory,现在在代码库中(他说不是),然后建议使用JsonDeserializer,现在基本上已弃用。 -
如果您愿意,可以提供更新的答案。无需跨问题传播。