我没有为此找到 RPC 机制,但我设法使用 JSON 来处理这个问题。我找到了 Gson,它是谷歌在 java 中使用 JSON 的 API。它将对象转换为可以解释为字符串的 JsonElements,反之亦然。所以帮助我开发这个的关键特性是 Gson 的自定义序列化器/反序列化器。我实现了一个类,它是 Object 的 Serializer 和 Deserializer,我将源类的类名与类的内容一起发送:
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);