ฉันต้องการถ่ายโอนวัตถุรายการผ่าน Google Gson แต่ฉันไม่ทราบวิธียกเลิกการกำหนดประเภททั่วไป
สิ่งที่ฉันลองหลังจากดูที่คำตอบนี้ (คำตอบของ BalusC):
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
แต่จากนั้นฉันได้รับข้อผิดพลาดใน eclipse ที่พูดว่า "The new 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 และ "ผล" เป็นไม่เป็นโมฆะ
ฉันตรวจสอบ listType กับดีบักเกอร์และได้รับสิ่งต่อไปนี้:
- รายการประเภท
- args = ListOfTypes
- รายการ = null
- resolveTypes = ประเภท [1]
- loader = PathClassLoader
- ownerType0 = null
- ownerTypeRes = null
- rawType = Class (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
ดังนั้นดูเหมือนว่าการเรียกใช้ "getClass" จะทำงานไม่ถูกต้อง ข้อเสนอแนะใด ๆ ... ?
Edit2: I'v การตรวจสอบในคู่มือการใช้ Gson มันกล่าวถึงข้อยกเว้นรันไทม์ที่ควรเกิดขึ้นในระหว่างการแยกประเภททั่วไปกับ Json ฉันทำมัน "ผิด" (ไม่แสดงด้านบน) เช่นเดียวกับในตัวอย่าง แต่ไม่ได้รับข้อยกเว้นนั้น ดังนั้นฉันจึงเปลี่ยนการจัดลำดับตามที่แนะนำในคู่มือผู้ใช้ ไม่ได้ช่วย แต่
แก้ไข 3: แก้ไขแล้วดูคำตอบของฉันด้านล่าง
TokenType
คำตอบที่คุณชี้ไปใช้ คุณลองแบบนั้นหรือไม่?