我在序列化Jackson中的泛型对象时遇到问题。我已经找到了一个解决方法,但我仍然不知道为什么我原来的解决方案不起作用。以下是我的设置:
public class ClassA<P>{
protected final LinkedList<P> list;
public ClassA(LinkedList<P> list){
this.list = list;
}
}
@JsonValue
public class ClassB extends ClassA<ParamClass>{
public ClassB(LinkedList<ParamClass> list) {
super(list);
}
@JsonCreator
public ClassB(int[] array) {
this(getList(array));
}
public int[] serialize(){
...
}
}
public class ParamClass extends BaseParamClass{
public int getInt(){
...
}
}
以下是我当前用于序列化方法的代码:
@JsonValue
public int[] serialize(){
int[] array = new int[list.size()];
for (int i = 0; i < array.length; i++) {
BaseParamClass paramClass = list.get(i);
locationsArray[i] = paramClass.getInt();
}
return locationsArray;
}
以下是应该起作用但不起作用的:
@JsonValue
public int[] serialize(){
int[] array = new int[list.size()];
for (int i = 0; i < array.length; i++) {
ParamClass paramClass = list.get(i);
locationsArray[i] = paramClass.getInt();
}
return locationsArray;
}
对于第二种情况,我得到了以下例外:
com.fasterxml.jackson.databind.JsonMappingException(packages.BaseParamClass cannot be cast to another.packages.ParamClass)
这是什么原因?从ClassB中的类型规范可以清楚地看出,列表中只能使用ParamClass,不能使用BaseParamClass。我错过什么了吗?
你需要告诉Jackson的ObjectMapper
目标类的泛型类型:
ObjectMapper mapper = new ObjectMapper();
TypeFactory factory = mapper.getTypeFactory();
JavaType paramClassType = factory.constructType(ParamClass.class);
JavaType classBType = factory.constructSimpleType(ClassB.class, new JavaType[]{paramClassType});
mapper.readValue(src, classBType);
问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将
我想以 json 格式序列化一个自定义对象,其中 entryData 是我的域对象的列表。像这样: 下面是我在一次尝试中为获得json输出所做的工作: 但结果是entryData评估为字符串,引号转义: 我也尝试过这样做: 但是我得到了这个例外:
我有下面的JSON,我正试图使用Jackson API反序列化它 我基本上需要一个附件类,它有一个AttachmentFile对象列表,如下所示: 如何使用自定义反序列化器实现这一点? 谢谢
我目前正在将一些代码从Jackson1.x迁移到Jackson2.5json映射器,遇到了一个1.x中没有的问题。 这是设置(参见下面的代码): 接口IPET 类Dog实现IPET IPET使用@jsonTypeInfo和@jsonSubtypes进行注释 类Human具有一个类型为IPet的属性,该属性使用@JSONSerialize(using=CustompetSerializer.clas
我有以下控制器: 使用以下请求对象: 当帖子通过并查看我得到的对象时,有效负载列表中有LinkedHashMap对象,而不是我的DTO类型的对象。 如何让Spring jackson将JSON转换为我的DTO对象。请记住,我计划对其他对象列表重用包装器响应DTO,这就是我使用通用列表(List)的原因。 这是我正在尝试的JSON。
我目前正在研究一个使用泛型的模型,它有点复杂。我知道类似的问题也得到了回答,但没有一个能明确回答我的问题。 这是我的模型: 我的目标是使用jackson进行序列化和反序列化,如下所示: 我得到了以下java。序列化过程中的lang.StackOverflower错误: 非常感谢您的帮助。