如何使用嵌套抽象类来处理GSON?

问题描述:

我读了很多关于使用TypeAdapterJsonSerializer/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类每个抽象类AG。 我知道我可以使用链接:gsonbuilder.registerTypeAdapter(A_Adapter).registerTypeAdapter(G_Adapter),但我需要使用更类似于TypeAdapterFactory的东西来识别使用的女巫适配器(以指定对应于我使用java annotaion/reflection的抽象类的适配器类)。 我也看到了TypeAdapter类,但由于JsonSerializer/Deserializer中存在context元素的缺失而实现起来太复杂。

任何想法如何做到这一点?

+0

如何让一个类组合所有字段,并让Gson在缺失时将它们设置为null(或者最好在Java 8中为可选)?至少反序列化....否则,我认为你应该显示你的JSON –

+0

感谢您的回应,我不能这样做,实际上我的课程系统更复杂,我需要继承/抽象功能 –

+0

@RCMSAS你想为'A'类的每个子类型('A' +'B' +'C')使用相同的序列化器和解序器?另一个用于'G' +'H'的TypeAdapter? – varren

要使用相同的序列化和desrializer为A类(A + B + C)的每一个亚型,你可以使用registerTypeHierarchyAdapter(A.class, new A_Adapter())documentation

配置GSON用于自定义序列化和反序列化一个 继承类型层次。此方法结合了TypeAdapter,JsonSerializer和JsonDeserializer的注册。如果以前为指定的类型层次注册了类型适配器 ,则会覆盖 。如果在 类型层次结构中注册了特定类型的类型适配器,将调用它,而不是为类型层次结构注册为 的类型适配器。

+0

这就是答案我的问题的一半,现在我想将它们插入'typeadapterfactory'中。 Actualy我只是想自动化系统,所有我调用'gson.fromJson/toJson'它搜索对象中使用的每个类(对于对象中的任何深层次),至少这个有我的@classSerializer java注释'包含正确的'serialiser/deserializer'来使用。如果它有它使用这个类来序列化/反序列化这部分对象。 我希望我解释我的自我:) –