如何使用嵌套抽象类来处理GSON?
我读了很多关于使用TypeAdapter
和JsonSerializer/Deserializer
来处理抽象类,我的问题是在嵌套抽象类的情况下。 我们说这个类:如何使用嵌套抽象类来处理GSON?
abstract class A {
String content;
}
abstract class G {
String otherContent;
}
class B extends A {
G g;
}
class C extends A {
String someThing;
}
class H extends G {
Integer num;
}
我已经编写了一个JsonSerializer/Deserializer
类每个抽象类A
和G
。 我知道我可以使用链接:gsonbuilder.registerTypeAdapter(A_Adapter).registerTypeAdapter(G_Adapter)
,但我需要使用更类似于TypeAdapterFactory
的东西来识别使用的女巫适配器(以指定对应于我使用java annotaion/reflection
的抽象类的适配器类)。 我也看到了TypeAdapter
类,但由于JsonSerializer/Deserializer
中存在context
元素的缺失而实现起来太复杂。
任何想法如何做到这一点?
要使用相同的序列化和desrializer为A
类(A
+ B
+ C
)的每一个亚型,你可以使用registerTypeHierarchyAdapter(A.class, new A_Adapter())
从documentation:
配置GSON用于自定义序列化和反序列化一个 继承类型层次。此方法结合了TypeAdapter,JsonSerializer和JsonDeserializer的注册。如果以前为指定的类型层次注册了类型适配器 ,则会覆盖 。如果在 类型层次结构中注册了特定类型的类型适配器,将调用它,而不是为类型层次结构注册为 的类型适配器。
这就是答案我的问题的一半,现在我想将它们插入'typeadapterfactory'中。 Actualy我只是想自动化系统,所有我调用'gson.fromJson/toJson'它搜索对象中使用的每个类(对于对象中的任何深层次),至少这个有我的@classSerializer java注释'包含正确的'serialiser/deserializer'来使用。如果它有它使用这个类来序列化/反序列化这部分对象。 我希望我解释我的自我:) –
如何让一个类组合所有字段,并让Gson在缺失时将它们设置为null(或者最好在Java 8中为可选)?至少反序列化....否则,我认为你应该显示你的JSON –
感谢您的回应,我不能这样做,实际上我的课程系统更复杂,我需要继承/抽象功能 –
@RCMSAS你想为'A'类的每个子类型('A' +'B' +'C')使用相同的序列化器和解序器?另一个用于'G' +'H'的TypeAdapter? – varren