我們正試圖評估傑克遜作爲Gson的替代品,並且我遇到了解泛型的問題。我覺得它是一個簡單的問題,我完全錯過了答案,並沒有通過谷歌或文檔找到examples/info。我希望有人能指出我的錯誤,或指出我的正確實施。從Gson移植到傑克遜,混淆了仿製藥和定製解串器
說我有一類這樣的:
public class Response<T extends BaseTypeInterface > implements BaseTypeInterface {
private Meta meta;
private T mResult;
private Group<Notification> notifications;
}
我希望做一個自定義序列化它,但沒有我這樣做讓我在解串器的T
類型信息。 理論上我想做SimpleModule.addDeserializer(Response.class, new ResponseV2Serializer<BaseTypeInterface>());
然後在解串器中,我想讀取從ObjectMapper.readValue(string, TypeReference<Response<SomeClassExtBaseTypeInterface>)
傳來的類型信息。
使用我當前的自定義解串器,我實現了ContextualDeserializer
,希望從BeanProperty
中提取類型信息,但每次其調用BeanProperty
爲空時。
public static class ResponseSerializer<T extends BaseTypeType>
extends JsonDeserializer<Response<T>>
implements ContextualDeserializer {
@Override
public ResponseV2<T> deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
return null;
}
@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property)
throws JsonMappingException {
return this;
}
}
樣品的Json是這樣的:
{
meta: {
code: 200,
requestId: "541fb2dc498e306d526f7e4c"
},
response: {
//content
}
}