【发布时间】:2014-11-16 17:22:43
【问题描述】:
我有一个相对复杂的对象,其中包含许多字段。我需要使用自定义序列化程序序列化其中一个字段,但需要模拟@JsonUnwrapped 功能。
为简单起见,我将其缩减为两个字段:
public class MyClass
{
@JsonProperty("subject")
private final String subject;
@JsonSerialize(using=MySenderSerializer.class)
private final MailActor sender;
}
而我的自定义序列化器类如下:
public class MySenderSerializer extends StdSerializer<MailActor>
{
public MySenderSerializer()
{
super(MailActor.class, true);
}
@Override
public void serialize(final MailActor value, final JsonGenerator gen, final SerializerProvider provider) throws IOException
{
gen.writeStringField("from_name", value.getName());
gen.writeStringField("from_email", value.getAddress());
}
}
这一切都很好,除了输出的 JSON 看起来像这样:
{
...
"subject": "test subject",
"sender": {
"from_name": "test from",
"from_email": "test@test.com"
},
...
}
我需要解开 sender 字段,以便 JSON 看起来像这样:
{
...
"subject": "test subject",
"from_name": "test from",
"from_email": "test@test.com",
...
}
如果我使用标准序列化程序,我可以使用 @JsonUnwrapped 注释来执行此操作,但它似乎与自定义序列化程序不兼容。如何在不为 MyClass 对象编写自定义序列化程序的情况下获得所需的 JSON 输出?
【问题讨论】: