【发布时间】:2019-02-08 18:40:46
【问题描述】:
我有一个 JSON 字符串:
{
"entities": [
{
"type": "fio",
"value": {
"firstName": "first",
"lastName": "last"
}
},
{
"type": "geo",
"value": {
"country": "the country",
"city": "the city"
}
},
{
"type": "number",
"value": 100
},
{
"type": "number",
"value": 3.14
}
]
}
这是一些实体的列表,具有参数 type 和 value。 根据 type,参数 value 具有特定的表示形式。
例如:
- 如果 type 是 fio,则 value 是一个包含 2 个字段的复杂对象:firstName 和 姓氏。
- 如果 type 是 geo,则 value 是一个包含字段的复杂对象: 国家、城市、...
- 如果 type 是 number,则 value 是一个普通数字(long 或 double)
我创建了一个抽象类EntityValue,实现很少。 我使用了杰克逊注解:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = GeoEntityValue.class, name = "geo"),
@Type(value = FioEntityValue.class, name = "fio"),
...
})
public class Entity {
private final EntityType type;
private final EntityValue value;
... constructor and getters ...
}
它非常适用于像 fio 或 geo 这样的复杂类型, 但我在 number 类型中挣扎。 它像一个复杂的对象一样序列化和反序列化,而不是像开头提到的例子。
您能帮我管理杰克逊注释或重新组织类层次结构以使序列化和反序列化工作吗?
谢谢!
【问题讨论】:
标签: java json serialization jackson deserialization