【发布时间】:2014-06-10 14:20:33
【问题描述】:
所以我正在寻求使用 Jackson 反序列化和序列化对象。对象具有层次结构,在层次结构的深处有一个
List<T>
其中 T 是一个字符串,或者是 Java 数字类之一。
反序列化通用列表一直是这些论坛上的一个常见话题,我知道如何构建一个映射器,该映射器将使用 mapper.readValue 反序列化或序列化列表。
我不知道该怎么做是这样,当我在顶层调用映射器时,它不明确知道它包含的类的参数化,这样它就知道如何当它到达包含参数化列表的底层类时调用自定义反序列化器。
省略了 getter/setter/constructors 的简单示例:
class A {
String name;
B thing;
}
class B {
String command;
List<C<?>> conditions;
}
class C<T> {
String type;
List<T> parameters
}
我想写一个杰克逊命令,一次性序列化 A。我一直在使用附加到A的方法:
public String toJSON() throws JsonProcessingException{
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping();
return mapper.writeValueAsString(this);
}
但这存在泛型集合丢失其类型信息且不可反序列化的已知问题。
我可以使用建议here 来反序列化具有通用参数的给定类,但我不知道如何组合这些解决方案。我希望 Jackson 有一些我可以为 C 编写自定义反序列化器的东西,它可以在达到该类类型时使用它,否则它可以使用普通的序列化器,这对于其他类来说很好。
【问题讨论】:
-
尝试更好地使用 Gson 库..
-
@sercan 向我们展示你所拥有的所有客观证据。
-
如果有人在 Gson 中提出这个问题的解决方案,我会很乐意使用它.... 立即阅读他们的用户指南。
-
@SercanOzdemir 如果您建议使用不同的库,您至少可以尝试解释这将如何提供帮助;否则你只是派 OP 去打野鹅。
-
很抱歉,但我没有足够的时间来测试并写到这里。但我可以给你一个链接,告诉你如何使用 GSON 自定义序列化/反序列化,这是其中一个 javacreed.com/gson-serialiser-example
标签: java json serialization jackson deserialization