GSON – Benutzerdefinierter Serializer in bestimmten Fällen

Lesezeit: 1 Minute

Benutzer-Avatar
Stéphane Piette

Ich habe dieses Schema:

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

Ich möchte das Data-Objekt mit Gson serialisieren und so etwas erhalten:

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

Dazu muss ich einen benutzerdefinierten Serializer für den Schülerteil verwenden, damit Gson nur die ID der Schule druckt. Aber für die Schule muss ich einen normalen Serializer haben.

Wie kann ich alles mit nur einem Gson-Objekt machen?

Benutzer-Avatar
Jonas

Sie können einen benutzerdefinierten Serialisierer etwa so schreiben:

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

  • Okay, ich mache das so, auch wenn es langweilig ist, wenn es viele Felder gibt und nur ein Fremdschlüssel …

    – Stéphane Piette

    28. Juli 2011 um 10:24 Uhr

Benutzer-Avatar
jobbert

Wo immer Sie dieses Objekt serialisieren möchten, müssen Sie es natürlich wie folgt zum Gson hinzufügen:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Student.class, new StudentAdapter())
    .create();
return gson.toJson([YOUR_OBJECT_TO_BE_SERIALIZED]);

1014790cookie-checkGSON – Benutzerdefinierter Serializer in bestimmten Fällen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy