2011-07-28 23 views
21

Tôi có schema này:GSON - serializer Tuỳ chỉnh trong trường hợp cụ thể

public class Student { 
     public String name; 
     public School school; 
} 

public class School { 
     public int id; 
     public String name; 
} 
public class Data { 
     public ArrayList<Student> students; 
     public ArrayList<School> schools; 
} 

Tôi muốn serialize các đối tượng dữ liệu với Gson, và nhận được một cái gì đó như:

{ "students": [{ 
       "name":"name1", 
       "school": "1"   //the id of the scool, not its entire Json 
       }], 
    "school": [{      //the entire JSON 
       "id" : "1", 
       "name": "schoolName" 
      }] 
} 

Để làm điều đó, tôi phải sử dụng serializer tùy chỉnh cho phần học sinh, để Gson chỉ in id của trường. Nhưng đối với trường, tôi phải có serializer nomal.

Tôi có thể làm mọi thứ chỉ với một đối tượng Gson?

Trả lời

34

Bạn có thể viết một cái gì đó tùy chỉnh serializer như thế này:

public class StudentAdapter implements JsonSerializer<Student> { 

@Override 
public JsonElement serialize(Student src, Type typeOfSrc, 
      JsonSerializationContext context) { 

     JsonObject obj = new JsonObject(); 
     obj.addProperty("name", src.name); 
     obj.addProperty("school", src.school.id); 

     return obj; 
    } 
} 
+0

Được rồi, Tôi sẽ làm như thế này, ngay cả khi nó nhàm chán khi có nhiều lĩnh vực, và chỉ một khoá ngoại ... –

17

Tất nhiên bất cứ nơi nào bạn đang đi để serialize đối tượng này, bạn cần phải thêm nó vào Gson như thế này:

GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(Student.class, new StudentAdapter()); 
return gsonBuilder.create().toJson([YOUR_OBJECT_TO_BE_SERIALIZED]); 
Các vấn đề liên quan