【发布时间】:2017-02-01 10:37:48
【问题描述】:
我想要一个用于类文字的序列化器和反序列化器。它应该从 / 映射到 JSON 字符串。它也应该适用于泛型类。
我尝试编写自定义反序列化器,但它处理所有类,而不仅仅是我想要的类:
public class MyDeserializer extends JsonDeserializer<Class<? extends Foo>> {
public Class<? extends Foo> deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String token = jp.getText();
switch(token) {
case "FOO": return Foo.class;
case "BAR": return Bar.class;
}
return null;
}
}
Jackson 将为每个Class<?> 调用此反序列化器。但我只是希望它被调用为Class<? extends Foo>。
顺便说一句:我想将其注册为全局反序列化器。我不想想在任何地方都使用@JsonDeserialize。
我怎样才能让它正常工作?
提前致谢。
编辑:更多代码
POJO:
public class MyPOJO {
public Class<? extends Foo> fooType;
}
JSON:
{
"fooType": "FOO"
}
ObjectMapper 用法:
MyPOJO pojo = new MyPOJO();
pojo.fooType = Foo.class;
ObjectMapper om = new ObjectMapper();
String json = om.writeValueAsString(pojo);
【问题讨论】:
-
能否请您为 Json POJO 添加代码并使用
ObjectMapper? -
添加了一些代码
-
如果你不想使用@JsonDeserialize,你能不能只在需要的地方使用@JsonIgnore? (即瞬态&不可序列化)
-
@Shine:不。我应该可以拥有
JsonDeserializer<Class<? extends Foo>>和JsonDeserializer<Class<? extends AnotherClass>>。两者都必须适用于不同的课程。在使用JsonDeserializer<Class<? extends Foo>>的那一刻,它会为每一种 类运行,即使是Class<Object>。 -
如果它不是
Class<? extends Foo>类型,而是任何其他类,你希望它做什么?
标签: java serialization jackson deserialization