2017-10-18 94 views
1

我讀了很多關於使用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

回答

0

要使用相同的序列化和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'來使用。如果它有它使用這個類來序列化/反序列化這部分對象。 我希望我解釋我的自我:) –

相關問題