后来意识到我需要在我的应用程序中序列化对象时将类名称包含为属性.如果我为任何序列化的非基本对象添加了类名属性,那可能是最好的.
我看到这是Genson中使用该useClassMetadata方法的内置功能.但是我已经在我的项目中使用了gson,所以如果我坚持下去就会有所帮助.
这是我目前的尝试:
package com.mycompany.javatest;
import com.google.gson.*;
import java.lang.reflect.*;
public class JavaTest {
public static class GenericSerializer implements JsonSerializer<Object>, JsonDeserializer<Object> {
private static final String CLASS_PROPERTY_NAME = "class";
@Override
public JsonElement serialize(Object src, Type typeOfSrc,
JsonSerializationContext context) {
JsonElement retValue = context.serialize(src);
if (retValue.isJsonObject()) {
retValue.getAsJsonObject().addProperty(CLASS_PROPERTY_NAME, src.getClass().getName());
}
return retValue;
}
@Override
public Object deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
Class actualClass;
if (json.isJsonObject()) {
JsonObject jsonObject = json.getAsJsonObject();
String className = jsonObject.get(CLASS_PROPERTY_NAME).getAsString();
try { …Run Code Online (Sandbox Code Playgroud)