Google Gson을 통해 목록 객체를 전송하고 싶지만 일반 유형을 역 직렬화하는 방법을 모르겠습니다.
이것을 보고 난 후에 시도한 것 (BalusC의 답변) :
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
그러나 "새 List () {} 형식은 상속 된 추상 메소드를 구현해야합니다 ..."라는 식의 오류가 발생합니다. 빠른 수정을 사용하면 20 개가 넘는 메소드 스텁의 몬스터가 생깁니다.
더 쉬운 해결책이 있다고 확신하지만 찾을 수없는 것 같습니다!
편집하다:
지금 나 한테있어
Type listType = new TypeToken<List<MyClass>>()
{
}.getType();
MyClass mc = new Gson().fromJson(result, listType);
그러나 "fromJson"줄에서 다음 예외가 발생합니다.
java.lang.NullPointerException
at org.apache.harmony.luni.lang.reflect.ListOfTypes.length(ListOfTypes.java:47)
at org.apache.harmony.luni.lang.reflect.ImplForType.toString(ImplForType.java:83)
at java.lang.StringBuilder.append(StringBuilder.java:203)
at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:56)
at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88)
at com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler(JsonDeserializationVisitor.java:76)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:106)
at com.google.gson.JsonDeserializationContextDefault.fromJsonArray(JsonDeserializationContextDefault.java:64)
at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49)
at com.google.gson.Gson.fromJson(Gson.java:568)
at com.google.gson.Gson.fromJson(Gson.java:515)
at com.google.gson.Gson.fromJson(Gson.java:484)
at com.google.gson.Gson.fromJson(Gson.java:434)
내가 할 캐치 JsonParseExceptions 및 "결과를"null이 아닙니다.
디버거로 listType을 확인하고 다음을 얻었습니다.
- 목록 유형
- args = ListOfTypes
- 목록 = null
- resolvedTypes = 유형 [1]
- 로더 = PathClassLoader
- ownerType0 = null
- ownerTypeRes = null
- rawType = 클래스 (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
"getClass"호출이 제대로 작동하지 않은 것 같습니다. 어떤 제안 ...?
Edit2 : Gson User Guide 에서 확인했습니다 . 제네릭 형식을 Json으로 구문 분석하는 동안 발생하는 런타임 예외에 대해 설명합니다. 예제에서와 같이 "잘못된"(위에 표시되지 않음)을 수행했지만 예외는 전혀 얻지 못했습니다. 따라서 사용자 안내서에서 제안한대로 직렬화를 변경했습니다. 그래도 도움이되지 않았습니다.
편집 3 : 해결되었습니다. 아래 답변을 참조하십시오.
TokenType
. 그런 식으로 시도 했습니까?