私は適切なサブクラスに逆直列化する必要があるオブジェクトのリストを持っています。私は以下のようなgsonオブジェクトを構築することでこれを得ることができました。サブクラスを拡張できるGsonのインスタンスを構築する
JsonDeserializer<Shape> jdTypes = (json, typeOfT, jsonContext) -> {
JsonObject jsonObject = json.getAsJsonObject();
int type = jsonObject.get("type").getAsInt();
Gson gson = new Gson();
switch (type){
case Types.TYPE_CARD:
return gson.fromJson(json, Card.class);
case Types.TYPE_BLOCK:
return gson.fromJson(json, Block.class);
case Types.TYPE_STRIPE:
return gson.fromJson(json, Stripe.class);
//...
}
};
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Shape.class, jdTypes);
builder.create();
これはうまくいく方法です。現在私はGsonBuilder内でGsonのインスタンスを作成しています。 Yikes。異なるサブタイプを非直列化するために構築しようとしているGsonオブジェクトを使用する方法はありますか?
RuntimeTypeAdapterFactoryが定義されたタイプではないでしょうなぜ任意のアイデア? – Canoe
@Canoe 'RuntimeTypeAdapterFactory'はGsonエクストラの一部です。メインライブラリはMaven Centralに公開されていません。コピー/貼り付け、または次のようなものを登録してください:https://mvnrepository.com/artifact/org.danilopianini/gson-extras/0.1.0 –
thanks私は余分なパッケージかもしれないと思っていましたが、Googleによって作成されたものを探していました。これはサードパーティの拡張機能です。ありがとう – Canoe