1

I am using gson for converting json string into java objects. In my application, I am creating one abstract class which has child classes. This is my class structure. enter image description here

In that case, using gson I want to create particular object. I am using following code to create particular java object.

   GsonBuilder gsonBuilder = new GsonBuilder();
                gsonBuilder.registerTypeAdapter(BaseClass.class, new InterfaceAdapter<BaseClass>());
                gsonBuilder.setPrettyPrinting();
                Gson gson = gsonBuilder.create(); 
     BaseClass baseClass = gson.fromJson(jsonObject.toString(),BaseClass.class); 
// Instead of this I used following function to create particular class object.

//Optional function
Class<BaseClass> clazz = (Class<BaseClass>) Class.forName("com.example." + "A");
BaseClass baseClass = gson.fromJson(jsonObject.toString(), clazz.getClass()); // This is not working for me

Here is my InterfaceAdapter code :

public class InterfaceAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T>
{

    @Override
    public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("type", src.getClass().getName());
        jsonObject.add("data", context.serialize(src));
        return jsonObject;
    }

    @Override
    public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
    {
        JsonObject jsonObject = (JsonObject) json;
        JsonElement jsonTypeElement = get(jsonObject, "type");
        JsonElement dataElement = get(jsonObject, "data");
        final Type actualType = typeForName(jsonTypeElement);

        return context.deserialize(dataElement, actualType);
    }

    private Type typeForName(final JsonElement typeElem)
    {
        try
        {
            return Class.forName(typeElem.getAsString());
        }
        catch (ClassNotFoundException e)
        {
            throw new JsonParseException(e);
        }
    }


    private JsonElement get(final JsonObject wrapper, final String memberName)
    {
        final JsonElement elem = wrapper.get(memberName);

        if (elem == null)
        {
            throw new JsonParseException(
                    "no '" + memberName + "' member found in json file.");
        }
        return elem;
    }
}

After execution of program I got only BaseClass object. I want to create particular java object like A, B or C objects. It is not given me particular java object that I want. I know, I misses something. So Could you please find out where should I do mistake?

Mangesh Sambare
  • 594
  • 3
  • 23

0 Answers0