Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集合的自定义序列化<;T>;使用杰克逊_Java_Json_Jackson - Fatal编程技术网

Java 集合的自定义序列化<;T>;使用杰克逊

Java 集合的自定义序列化<;T>;使用杰克逊,java,json,jackson,Java,Json,Jackson,我想像这样转换一个java集合 public Collection<SomeDTO> getPages() { return pages; } 这是现成的,但我现在不想对SomeDTO使用默认序列化。具体地说,我想写出一个对象,它包括一组值和一些基于SomeDTO的附加计算 我尝试使用@JsonSerialize(using=Serializer),但当这应用于Collection方法时,我不希望自己序列化集合。这是可行的,但我更愿意简单地定义DTO是如何序列化的 想法?您

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

public Collection<SomeDTO> getPages()
{
    return pages;
}
这是现成的,但我现在不想对
SomeDTO
使用默认序列化。具体地说,我想写出一个对象,它包括一组值和一些基于
SomeDTO
的附加计算

我尝试使用
@JsonSerialize(using=Serializer)
,但当这应用于Collection方法时,我不希望自己序列化集合。这是可行的,但我更愿意简单地定义DTO是如何序列化的


想法?

您是否考虑过向SomeDto添加getter以用于要序列化的其他字段?

这可能不会立即起到帮助作用,但@JsonSerialize的问题在于@jsonderialize与@jsonderialize不同,后者既有“使用”(对于类型本身,如ArrayList)又有“内容使用”(对于值类型)@JsonSerialize直到Jackson 1.8才有后者(它确实存在于主干中)

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

我认为@JsonSerialize(using=Serializer)也可以在类级别上使用。但不知怎么的,这对我不起作用。有人能给我举一个如何将其应用于类的工作示例吗?你能详细说明“基于SomeDTO的值和一些附加计算”吗?您的输出应该是什么样子的?您的输出将如下->页面:[{DTO},{DTO},{DTO},{computed DTO}]?或者像这样->页面:[{computed DTO},{computed DTO},{computed DTO}]?这确实是我提出并考虑的解决方案。方法是将不需要的属性标记为@JsonIgnore或@xmltransive,并专门为基于其他属性的所需输出添加属性。塔克斯!thanx,将@JsonSerializer添加到应该转换的dto中。在序列化程序中,我创建了一个新的值dto,然后通过generator.writeObject(o)将其写入json输出,这非常有效。
pages: [{DTO}, {DTO}, {DTO}]