【发布时间】:2020-07-16 19:48:12
【问题描述】:
我想使用 Gson 导入和导出在我的软件中创建的角色,虽然导出工作正常,但导入失败并显示
java.lang.IllegalArgumentException: Can not set javafx.collections.ObservableList field items.GameCharacter.weapons to java.util.ArrayList
我阅读了 gson 文档,它说通过令牌类型解决这个问题,但我不知道我应该如何做到这一点,因为 Gson 无法反序列化的属性是不同的类型: 完整的对象是带有一些整数和字符串的 GameCharacter 类型,但我也使用:
private ObservableList<Weapon> weapons;
private BattleRound battleRound;
private ObservableList<Spell> spells;
private Armor armor;
当 gson 只接受一个 TypeToken 时,我如何准确地告诉 gson 所有这些不同的类型? 任何帮助,将不胜感激 :) 顺便说一句,我用于导入的代码:
public class Import {
private Gson gson = new GsonBuilder().setPrettyPrinting().create();
public GameCharacter importCharacter(String url) {
try (Reader reader = Files.newBufferedReader(Paths.get(url), Charset.defaultCharset())) {
return gson.fromJson(reader, new TypeToken<GameCharacter>(){}.getType());
} catch (IOException e) {
}
throw new NullPointerException("No character was able to load");
}
}
【问题讨论】:
标签: java gson deserialization observablelist