このための RPC メカニズムは見つかりませんでしたが、JSON を使用してこれを処理することができました。JavaでJSONを使用するためのGoogleのAPIであるGsonを見つけました。オブジェクトを文字列として解釈できる JsonElements に変換し、その逆も同様です。これを開発するのに役立った重要な機能は、Gson のカスタム シリアライザー/デシリアライザーでした。オブジェクトのシリアライザーとデシリアライザーであるクラスを実装し、クラスのコンテンツに沿ってソース クラスのクラス名を送信します。
class MySerializerAndDeserializer implements JsonSerializer<Object>, JsonDeserializer<Object>{
public JsonElement serialize(Object src, Type typeOfSrc,
JsonSerializationContext context) {
Class clazz = src.getClass();
JsonElement serialize = context.serialize(src);
JsonArray array = new JsonArray();
array.add(new JsonPrimitive(clazz.getName()));
array.add(serialize);
return array;
}
public Object deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
JsonArray array = json.getAsJsonArray();
String asString = array.get(0).getAsString();
Object deserialize = null;
try {
deserialize = context.deserialize(array.get(1).getAsJsonObject(), Class.forName(asString));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return deserialize;
}
}
次に、Parent.class に MySerializerAndDeserializer を登録しました。
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Parent.class, new MySerializerAndDeserializer());
そして最後に gson を使用して、私が期待したインスタンスを正しく取得しました:
String json = gson.toJson(container, Container.class);
Container containerFromJson = gson.fromJson(json, Container.class);