gpt4 book ai didi

java - 由于使用了 Observable List,Gson 无法反序列化

转载 作者:行者123 更新时间:2023-12-04 09:28:03 26 4
gpt4 key购买 nike

我想使用 Gson 来输入和导出在我的软件中创建的字符,虽然导出工作正常,但导入失败并显示

java.lang.IllegalArgumentException: Can not set javafx.collections.ObservableList field items.GameCharacter.weapons to java.util.ArrayList
我阅读了 gson 文档,它说通过 token 类型解决这个问题,但我不知道我应该如何做到这一点,因为 Gson 无法反序列化的属性属于不同类型:
完整的对象是带有一些整数和字符串的 GameCharacter 类型,但我也使用:
    private ObservableList<Weapon> weapons;
private BattleRound battleRound;
private ObservableList<Spell> spells;
private Armor armor;
当 gson 只接受一个 TypeToken 时,我如何准确地告诉它所有这些不同的类型?
任何帮助,将不胜感激 :)
顺便说一句,我用于导入的代码:
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");
}
}

最佳答案

类型标记有助于解决在运行时丢失泛型信息的类型删除问题(List<String> 在运行时变为 List 所以它不知道列表中的内容)。
您的问题看起来像是在尝试反序列化为 ObservableList,这可能不是默认情况下与 gson 兼容的类型。您可以按照 docs 实现自己的自定义解串器或者您可以序列化/反序列化为一个更简单的对象,该对象使用核心更好支持的类型,例如 List 并复制到您的内部对象。
通常像 Observable List 这样的对象不是序列化使用的好目标,因为它们需要额外的工作来在重新加载时重新初始化。

关于java - 由于使用了 Observable List,Gson 无法反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62942442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com