【发布时间】:2014-02-10 08:59:06
【问题描述】:
是否可以仅使用注释来序列化 Jackson 中没有字段的对象?当我尝试序列化这样一个没有注释的对象时,我得到:
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class [redacted].SubjectObjectFeatureExtractor and no properties discovered to create BeanSerializer
我检查了list of Jackson annotations,但没有找到将类注释为没有可序列化数据的方法。我尝试将@JsonCreator 放在空构造函数上(不希望它工作,因为它是一个反序列化注释),我得到了同样的错误。没有可放置@JsonProperty 的访问器或字段。有什么想法吗?
更新: 这样做的原因是我有一个对象列表,这些对象表示可以应用于特定类型数据的转换。其中一些转换是由需要序列化的参数定义的,但其中一些是无参数的(有问题的无数据对象)。我希望能够序列化和反序列化这些转换的序列。另外,我正在使用DefaultTyping.NON_FINAL,以便将类名序列化。
更新:一个示例类是
class ExtractSomeFeature implements FeatureExtractor<SomeOtherType> {
public void extractFeature(SomeOtherType obj, WeightedFeatureList output) {
// do stuff
}
}
我并不特别关心 JSON 的外观,只要我能正确反序列化 List<FeatureExtractor>s 即可。我的印象是,使用默认类型,预期的 JSON 会是这样的:
['com.mycompany.foo.ExtractSomeFeature', {}]
FeatureExtractor 的其他子类将具有实际参数,因此它们可能看起来像:
[`com.mycompany.foo.SomeParameterizedFeature', {some actual JSON stuff in here}]
我想我可以在某些toJSONString() 方法上使用@JsonValue 来返回{},但如果可能的话,我想对将创建FeatureExtractor 子类的最终用户隐藏这样的黑客行为。
【问题讨论】:
-
所以你只想要一个空的
{}?那有什么目的? -
@SotiriosDelimanolis:我已根据您的问题更新了问题。
-
请举例说明您想要序列化的对象类型以及您期望生成的 JSON 是什么。
-
@SotiriosDelimanolis:问题已更新。
-
Jackon 的 JIRA 中存在一个相关问题:jira.codehaus.org/browse/…,这似乎表明该问题已解决,因此带有其他 Jackson 注释的 POJO(例如,我假设空构造函数上的 @JsonCreator)应该不抛出异常。然而,情况似乎并非如此。
标签: java serialization jackson