私は抽象クラスを扱うために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;
}
私はすでに各抽象クラスA
とG
ためJsonSerializer/Deserializer
クラスをコード化: は、このクラスは言ってみましょう。 gsonbuilder.registerTypeAdapter(A_Adapter).registerTypeAdapter(G_Adapter)
にチェーンを使用することができますが、TypeAdapterFactory
のようなものを使用する必要があります(java annotaion/reflection
という抽象クラスに対応するアダプタクラスを指定するために)。 私もTypeAdapter
クラスを見ましたが、JsonSerializer/Deserializer
に存在するcontext
要素がないため実装が複雑すぎます。
どうすればいいですか?あなたはdocumentationからregisterTypeHierarchyAdapter(A.class, new A_Adapter())
を使用することができます(A
+ B
+ C
)A
クラスのすべてのサブタイプのための同じシリアライザとdesrializerを使用するには
すべてのフィールドを結合し、Gsonにヌル(または、好ましくはJava 8のオプション)が設定されていない場合、それを1つのクラスにするのはいかがですか?それ以外の場合は、JSONを表示する必要があります。 –
レスポンスありがとうございます。私のクラスシステムはもっと複雑で、継承/抽象化の必要性があります。 –
@RCMSAS 'A'クラス(' A' + 'B' +' C')のすべてのサブタイプに対して同じシリアライザとデシリアライザを使用しますか? 'G' +' H'の別のTypeAdapter? – varren