使用Jackson </t>自定义Collection <t>序列化

时间:2011-03-14 14:49:21

标签: java json jackson

我想像这样转换一个java集合

public Collection<SomeDTO> getPages()
{
    return pages;
}

到这样的json数组:

pages: [{DTO}, {DTO}, {DTO}]

这是开箱即用的,但我现在不想使用SomeDTO的默认序列化。具体来说,我想写出一个对象,其中包含值的组合以及基于SomeDTO的一些额外计算。

我尝试使用@JsonSerialize(using=Serializer),但是当它应用于Collection Method时,它会让我自己序列化该集合。这是可行的,但我更愿意简单地定义如何将DTO序列化。

想法?

2 个答案:

答案 0 :(得分:3)

这可能没有立即帮助,但@JsonSerialize的问题是,与@JsonDeserialize不同,它同时具有“using”(对于类型本身,如ArrayList)和“contentUsing”(对于值类型); @JsonSerialize在Jackson 1.8之前没有后者(它确实存在于主干中)。

但是,如果需要,可以为SomeDTO类型注册自定义序列化程序,并在序列化将它们作为值类型的集合时使用。 有多种方法可以注册这样的自定义序列化器;一种是将@JsonSerializer(使用= ...)添加到SomeDTO的声明中。如果您无法将其添加到类定义(第三方类),则可以使用混合注释来关联注释。

答案 1 :(得分:0)

您是否考虑过将getter添加到SomeDto以获取要序列化的其他字段?