我没有找到这种RPC机制,但我设法使用JSON来处理这个。我发现Gson是在Java中使用JSON的谷歌API。它将对象转换为可以被解释为字符串的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;
}
}
,然后我注册MySerializerAndDeserializer为Parent.class:
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);