gson 如何正确地反序列化ItemStack?

eyh26e7m  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(151)

我正在研究一种在MySQL数据库中保存ItemStacks的方法。序列化和保存工作正常,但如果我反序列化它,我只会得到没有ItemMeta的项目(例如,项目在反序列化后没有被魔法化)。
有没有人知道如何正确地反序列化它?我在网上找到了很多关于这个的东西,但是所有的东西都过时了,不能在1.16.4中工作。

我的功能:

private static String itemStackToString(ItemStack item) {
    Gson gson = new Gson();
    return gson.toJson(item.serialize());
}

private static ItemStack stringToItemStack(String str) {
    Gson gson = new Gson();
    Map<String, Object> map = gson.fromJson(str, new TypeToken<Map<String, Object>(){}.getType());
    return ItemStack.deserialize(map);
}
ux6nzvsh

ux6nzvsh1#

这个问题很可能是ItemStack.deserialize预期"meta"ItemMeta的执行严修。但是,因为您要告诉Gson将数据还原序列化为Map<String, Object>,所以它不知道这项需求,而是将"meta"属性值还原序列化为Map
您可以通过编写一个处理此问题的自定义Gson TypeAdapter来解决此问题,但它可能仍然相当脆弱。
也许您可以以某种方式使用ConfigurationSection进行序列化,如这里所示,但我不知道它的工作效果如何,也不知道它是否是正确的(和安全的)解决方案。

相关问题