ไลบรารี Gson มีคลาส com.google.gson.reflect.TypeToken สำหรับเก็บ Generic Type โดยสร้าง TypeToken แล้วส่งประเภทคลาสเข้าไป Gson จึงรู้จักคลาสภายใน Generic ได้
Syntax
public class TypeToken<T> extends Object
ตัวอย่าง: Deserialize JSON Array เป็น List<Student>
import java.lang.reflect.Type;
import java.util.*;
import com.google.gson.*;
import com.google.gson.reflect.*;
public class JSONArrayToListTest {
public static void main(String[] args) throws Exception {
String jsonStr = "[{\"name\":\"Adithya\", \"course\":\"Java\"}," +
"{\"name\":\"Ravi\", \"course\":\"Python\"}]";
Type listType = new TypeToken<ArrayList<Student>>() {}.getType();
List<Student> students = new Gson().fromJson(jsonStr, listType);
System.out.println(students);
}
}
// Student class
class Student {
String name;
String course;
@Override
public String toString() {
return "Student [name=" + name + ", course=" + course + "]";
}
}
ผลลัพธ์
[Student [name=Adithya, course=Java], Student [name=Ravi, course=Python]]
จุดสำคัญ: ใช้ new TypeToken<ArrayList<Student>>() {}.getType() เพื่อให้ Gson รู้จัก Generic Type ในขณะ Runtime (Type Erasure)