【发布时间】:2017-04-26 19:56:46
【问题描述】:
我正在尝试反序列化 List 的 Research 对象,但我无法使其工作。我知道我需要一个自定义适配器来反序列化我的对象,因为我在 Research 类中使用了一个接口,但我不确定如何实现它。
我目前有一个序列化程序,它似乎可以工作并保存类类型以进行反序列化。我一直在使用这篇 SO 帖子中的一些代码来制作序列化器:Gson deserialize interface to its Class implementation
这是我正在使用的 JSON:
[
{
"bought":false,
"cost":-20,
"effect":{
"amount":1,
"className":"com.example.slarocque.cellclicker.Research.ResearchEffects.ClickAmountEffectStatic"
},
"name":"Better Flasks"
},
{
"bought":false,
"cost":-100,
"effect":{
"className":"com.example.slarocque.cellclicker.Research.ResearchEffects.ClickAmountEffectPercent",
"percent":120
},
"name":"Buy a new Heater"
},
{
"bought":false,
"cost":-250,
"effect":{
"amount":2,
"className":"com.example.slarocque.cellclicker.Research.ResearchEffects.ClickAmountEffectStatic"
},
"name":"Upgrade to Bacteria SuperFood"
}
]
这是Research 基类:
public class Research implements Serializable {
public String name;
public int cost;
public boolean bought = false;
public IResearchEffect effect;
public Research() {super();}
public Research(String _name, int _points, IResearchEffect _effect, Boolean _bought){
super();
this.name = _name;
this.cost = _points;
this.effect = _effect;
this.bought = (_bought == null ? false : _bought);
}
public void IsComplete() {
this.bought = true;
}
@Override
public String toString() {
return this.name + " - " + this.cost;
}
}
最后,这就是我尝试反序列化 Gson 字符串的方式:
String json = settings.getString("List", null);
List<Research> list = new ArrayList<>();
//Make the GsonBuilder
final GsonBuilder builder = new GsonBuilder();
//builder.registerTypeAdapter(list.getClass(), /*Need adapter*/);
final Gson gson = builder.create();
Type listType = new TypeToken<List<Research>>() {}.getType();
ResearchController.listResearch = gson.fromJson(json, listType);
【问题讨论】:
标签: java gson deserialization