我一生都无法弄清楚如何反序列化:
{
"c8147c8a-09c3-4165-b5c2-ce72e2c97100": {
"pets": {
"BOOST": [
{
"mcmmoBoost": 15.0,
"owner": "c8147c8a-09c3-4165-b5c2-ce72e2c97100",
"entityType": "IRON_GOLEM",
"health": 150.0,
"tier": 1,
"alive": true
}
]
},
"uuid": "c8147c8a-09c3-4165-b5c2-ce72e2c97100"
}
}
进入一个Map<UUID, PetPlayer>带有 PetPlayer 的包含一个名为“pets”的多图,其结构如下;Multimap<PetType, Pet>. PetType 在这里是一个枚举,而 Pet 是一个具有多个实现的抽象类。
我尝试使用这两个序列化器和反序列化器。
第一:public final class HashMultimapAdapter implements JsonSerializer>, JsonDeserializer> { private static final PetAdapter petAdapter = new PetAdapter();
@Override
public JsonElement serialize(Multimap<PetType, Pet> src, Type typeOfSrc, JsonSerializationContext context) {
return context.serialize(src.asMap());
}
@Override
public Multimap<PetType, Pet> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Map<PetType, Collection<JsonElement>> asMap = context.deserialize(json, new TypeToken<Map<PetType, Collection<JsonElement>>>(){{}}.getType());
Multimap<PetType, Pet> multimap = ArrayListMultimap.create();
for (Map.Entry<PetType, Collection<JsonElement>> entry : asMap.entrySet()) {
entry.getValue().forEach(jsonElement -> {
multimap.put(entry.getKey(), petAdapter.deserialize(jsonElement, Pet.class, context));
});
}
return multimap;
}
}
这导致了堆栈溢出。
java.lang.StackOverflowError
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375) ~[PaperSpigot-1.8.8-R0.1.jar:git-PaperSpigot-"4c7641d"]
我非常感谢任何帮助:)
青春有我
相关分类