2011-07-28 20 views
21

Bu şemayı var:GSON spesifik durumda özel seri hale getirici

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; 
} 

GSON ile Veri nesne seri ve benzeri bir şey almak istiyorum:

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

o hale getirmek için, öğrenci parçası için özel seri hale getirici kullanmalıdır, böylece Gson sadece Okulun kimliğini yazdırır. Ama okul için aday seri hale getiriciye sahip olmalıyım.

Her şeyi tek bir Gson nesnesiyle nasıl yapabilirim?

cevap

34

Böyle özel bir seri hale getirici bir şeyler yazabilirsiniz:

Eğer böyle GSON eklemek gerekir bu nesne seri olacak yerde Tabii
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

Tamam, Çok fazla alan olduğunda ve sadece bir yabancı anahtar olduğunda sıkıcı olsa bile ... –

17

:

GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(Student.class, new StudentAdapter()); 
return gsonBuilder.create().toJson([YOUR_OBJECT_TO_BE_SERIALIZED]); 
İlgili konular