Gson で抽象クラスをデシリアライズする 質問する

Gson で抽象クラスをデシリアライズする 質問する

JSON 形式のツリー オブジェクトがあり、これを Gson で逆シリアル化しようとしています。各ノードには、オブジェクト タイプ Node のフィールドとして子ノードが含まれています。Node はインターフェイスであり、いくつかの具体的なクラス実装があります。逆シリアル化プロセス中に、ノードがどのタイプに属しているか事前にわからない場合、ノードを逆シリアル化するときに実装する具体的なクラスを Gson に伝えるにはどうすればよいですか。各ノードには、タイプを指定するメンバー フィールドがあります。オブジェクトがシリアル化された形式の場合にフィールドにアクセスし、何らかの方法でタイプを Gson に伝える方法はありますか。

ありがとう!

ベストアンサー1

カスタムを追加することをお勧めしますJsonデシリアライザーsの場合Node:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Node.class, new NodeDeserializer())
    .create();

JsonElementデシリアライザのメソッドでノードを表す にアクセスし、それを に変換してJsonObject、型を指定するフィールドを取得できるようになります。その後、Nodeそれに基づいて の正しい型のインスタンスを作成できます。

おすすめ記事