Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Serialize และ Deserialize Generic Types ด้วย Gson ใน Java

หาก Java Class เป็น Generic Type และใช้กับ Gson Library สำหรับ JSON Serialization และ Deserialization Gson มีคลาส com.google.gson.reflect.TypeToken เก็บ Generic Types โดยสร้าง TypeToken Class ส่ง Class Type เข้าไป Gson จึงรู้จัก Class ใน Generic ได้

Syntax

public class TypeToken<T> extends java.lang.Object

ตัวอย่าง: Generic List<String> Serialization/Deserialization

import java.lang.reflect.Type;
import java.util.*;
import com.google.gson.*;
import com.google.gson.reflect.*;

public class GenericTypesJSONTest {
    public static void main(String[] args) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        
        List<String> list = Arrays.asList("INDIA", "AUSTRALIA", "ENGLAND", "SOUTH AFRICA");
        
        // Serialize
        String jsonStr = gson.toJson(list);
        System.out.println(jsonStr);
        
        // Deserialize - ต้องใช้ TypeToken
        Type listType = new TypeToken<List<String>>() {}.getType();
        list = gson.fromJson(jsonStr, listType);
        System.out.println(list);
    }
}

ผลลัพธ์

[
  "INDIA",
  "AUSTRALIA",
  "ENGLAND",
  "SOUTH AFRICA"
]
[INDIA, AUSTRALIA, ENGLAND, SOUTH AFRICA]

จุดสำคัญ: ใช้ new TypeToken<List<String>>() {}.getType() (Anonymous Inner Class) เพื่อ Capture Generic Type Information ที่ถูก Erase ที่ Runtime

ใช้กับ: List<T>, Set<T>, Map<K,V>, Custom Generic Classes