ฉันต้องการถ่ายโอนออบเจ็กต์รายการผ่าน Google Gson แต่ฉันไม่ทราบวิธีดีซีเรียลไลซ์ประเภททั่วไป
สิ่งที่ฉันลองหลังจากดู สิ่งนี้ ( คำตอบของ BalusC):
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
แต่แล้วฉันได้รับข้อผิดพลาดใน eclipse โดยแจ้งว่า "ประเภท new List(){} ต้องใช้วิธีนามธรรมที่สืบทอดมา..." และหากฉันใช้วิธีแก้ไขด่วน ฉันจะได้รับมอนสเตอร์ที่มีเมธอด stub มากกว่า 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 ด้วยดีบักเกอร์และได้รับสิ่งต่อไปนี้:
- list Type
- args = ListOfTypes
- list = null
- SolvedTypes = ประเภท[ 1 ]
- ตัวโหลด = PathClassLoader
- OwnerType0 = โมฆะ
- OwnerTypeRes = null
- rawType = คลาส (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
ดูเหมือนว่าการเรียกใช้ "getClass" ทำงานไม่ถูกต้อง ข้อเสนอแนะใด ๆ ... ?
แก้ไข 2: ฉันได้ตรวจสอบ Gson แล้ว คู่มือผู้ใช้ โดยกล่าวถึง Runtime Exception ที่ควรเกิดขึ้นระหว่างการแยกวิเคราะห์ประเภททั่วไปเป็น Json ฉันทำ "ผิด" (ไม่ได้แสดงไว้ด้านบน) เช่นเดียวกับในตัวอย่าง แต่ไม่ได้รับข้อยกเว้นนั้นเลย ดังนั้นฉันจึงเปลี่ยนซีเรียลไลซ์ตามคำแนะนำในคู่มือผู้ใช้ แต่ก็ไม่ได้ช่วยอะไร
แก้ไข 3: แก้ไขแล้ว ดูคำตอบของฉันด้านล่าง
TokenType
คุณลองวิธีนี้แล้วหรือยัง? - person Nishant   schedule 05.04.2011