所以我正在使用json jackson序列化和反序列化数据对象。我有2个类扩展了StdDeserializer<UserData>
和StdSerializer<UserData>
。我将对象序列化为:
@Override
public void serialize(UserData userData, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStringField("uuid", userData.getName());
jsonGenerator.writeStringField("rank", userData.getRank() == null ? "None" : userData.getRank().getName());
jsonGenerator.writeStringField("subrank", userData.getSubrank() == null ? "None" : userData.getSubrank().getName());
jsonGenerator.writeNumberField("coins", userData.getCoins());
}
@Override
public void serializeWithType(UserData value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
typeSer.writeTypePrefix(gen, typeSer.typeId(value, JsonToken.START_OBJECT));
serialize(value, gen, serializers);
typeSer.writeTypeSuffix(gen, typeSer.typeId(value, JsonToken.END_OBJECT));
}
并反序列化为:
@Override
public UserData deserializeWithType(JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException {
return deserialize(p, ctxt);
}
@Override
public UserData deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
UUID uuid = UUID.fromString(node.get("uuid").asText());
String name = node.get("name").asText();
Rank rank = null;
Rank subrank = null;
long coins = node.get("coins").longValue();
return new CoreUserData(uuid, name, rank, subrank, coins);
}
但是当我尝试那样做时,我得到一个错误提示
Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'net.simonm.core.common.user.data.CoreUserData' as a subtype of `com.fasterxml.jackson.databind.JsonNode`: Not a subtype
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 11]
我该如何解决?
**仍然没有弄清楚