比如我有这样一个继承体系
package com.zoo;
abstract class Animal {
}
class Dog extends Animal {
private String wang;
}
class Cat extends Animal {
private String miao;
}
class Cage {
private int id;
private Animal animal;
}
当我想反序列化一个JSON字符串,且Animal的具体类型是Dog时,我只能
{
"id": 1,
"animal": {
"@type": "com.zoo.Dog",
"wang": "wangwang"
}
}
@type只能用类的full qualified name.
这样的话我不得不把具体实现类的包名暴露出去。
fastxml的做法是
package com.zoo;
@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY)
@JsonSubTypes({ @Type(value = Dog.class), @Type(value = Cat.class) })
abstract class Animal {
}
@JsonTypeName("dog")
class Dog extends Animal {
private String wang;
}
@JsonTypeName("cat")
class Cat extends Animal {
private String miao;
}
class Cage {
private int id;
private Animal animal;
}
我的JSON串就可以这样写:
{
"id": 1,
"animal": {
"@type": "dog",
"wang": "wangwang"
}
}
@type的值是dog,类似一个别名,而不用写类的全路径名。
希望fastjson也能尽快支持这个需求。
已经实现了,看一下文档:https://github.com/alibaba/fastjson/wiki/JSONType_seeAlso_cn 看是否符合你的需求
@wenshao 不想使用注解@JsonTypeInfo、@JsonSubTypes、@JsonTypeName。
是否提供了其他的方式,比如config,或者配置文件?
Most helpful comment
@wenshao 不想使用注解@JsonTypeInfo、@JsonSubTypes、@JsonTypeName。
是否提供了其他的方式,比如config,或者配置文件?