1
json 문자열을 Java 개체로 변환하는 데 gson
을 사용하고 있습니다. 내 응용 프로그램에서는 자식 클래스가있는 하나의 추상 클래스를 만듭니다. 이것이 내 수업 구조입니다. Gson : gson을 사용하여 json 개체를 자식 클래스 개체로 변환하는 방법
이 경우 gson
을 사용하여 특정 개체를 만들고 싶습니다. 특정 자바 개체를 만들려면 다음 코드를 사용하고 있습니다.
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;
}
}
이 프로그램의 실행 후 난 단지 BaseClass로 객체를 가지고 :
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
여기 내 InterfaceAdapter 코드입니다. 나는 A, B 또는 C 객체와 같은 특정 자바 객체를 만들고 싶다. 그것은 내가 원하는 특정 Java 객체를 제공받지 못한다. 나도 알아, 나는 뭔가를 그리워. 그럼 실수를 어디서해야합니까?
fromJson() 메서드에서 BaseClass.class 대신 A.class 또는 B.class 또는 C.class를 사용하십시오. – chandil03