Tôi muốn chuyển một đối tượng danh sách qua Google Gson, nhưng tôi không biết làm thế nào để giải tuần tự các loại chung chung.
Những gì tôi đã thử sau khi xem xét điều này (câu trả lời của BalusC):
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
nhưng sau đó tôi gặp lỗi trong nhật thực với nội dung "Loại danh sách mới () {} phải thực hiện phương thức trừu tượng được kế thừa ..." và nếu tôi sử dụng một bản sửa lỗi nhanh, tôi sẽ nhận được một con quái vật gồm hơn 20 sơ khai phương thức.
Tôi khá chắc chắn rằng có một giải pháp dễ dàng hơn, nhưng dường như tôi không thể tìm thấy nó!
Biên tập:
Bây giờ tôi có
Type listType = new TypeToken<List<MyClass>>()
{
}.getType();
MyClass mc = new Gson().fromJson(result, listType);
Tuy nhiên, tôi nhận được ngoại lệ sau tại dòng "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)
Tôi làm JsonParseExceptions bắt và "kết quả" không phải là null.
Tôi đã kiểm tra listType với trình gỡ lỗi và nhận được thông tin sau:
- loại danh sách
- args = ListOfTypes
- danh sách = không
- yetTypes = Loại [1]
- trình tải = PathClassLoader
- chủ sở hữu0 = null
- ownTypeRes = null
- rawType = Class (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
vì vậy có vẻ như lệnh gọi "getClass" không hoạt động đúng. Bất kỳ đề xuất...?
Chỉnh sửa2: Tôi đã kiểm tra Hướng dẫn sử dụng Gson . Nó đề cập đến một Ngoại lệ Thời gian chạy sẽ xảy ra trong khi phân tích một loại chung cho Json. Tôi đã làm "sai" (không được hiển thị ở trên), giống như trong ví dụ, nhưng không có ngoại lệ nào cả. Vì vậy, tôi đã thay đổi serialization như trong hướng dẫn sử dụng đề xuất. Không giúp đỡ, mặc dù.
Edit3: Đã giải quyết, xem câu trả lời của tôi dưới đây.
TokenType
. Bạn đã thử theo cách đó?