Benutzerdefinierter JSON-Deserialisierer für Gson
Beim Empfang von JSON-Daten mit benutzerdefinierten Strukturen reicht der Standard-Deserialisierungsprozess von Gson möglicherweise nicht aus. In solchen Fällen ist ein benutzerdefinierter Deserialisierer erforderlich.
Betrachten Sie die folgende Java-Klasse, die einen Benutzer darstellt:
public class User { int id; String name; Timestamp updateDate; }
Und eine JSON-Struktur, die eine Liste von Benutzern darstellt:
[{"id":1,"name":"Jonas","update_date":"1300962900226"}, {"id":5,"name":"Test","date_date":"1304782298024"}]
Um dieses JSON in Benutzerinstanzen zu deserialisieren, kann ein benutzerdefinierter Deserialisierer verwendet werden definiert:
import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import java.lang.reflect.Type; import java.sql.Timestamp; public class UserDeserializer implements JsonDeserializer<User> { @Override public User deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { long time = json.getAsJsonPrimitive().getAsLong(); return new User( json.get("id").getAsInt(), json.get("name").getAsString(), new Timestamp(time)); } }
Dieser Deserialisierer analysiert den JSON in eine Benutzerinstanz und berücksichtigt dabei die angegebenen Feldnamen und die benutzerdefinierte Zeitstempelanalyse.
Um diesen Deserialisierer auf die Gson-Instanz anzuwenden, verwenden Sie die registerTypeAdapter-Methode:
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(User.class, new UserDeserializer()); Gson gson = gsonBuilder.create();
Jetzt kann der JSON mithilfe von in eine Liste von Benutzerinstanzen deserialisiert werden modifizierte Gson-Instanz.
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen benutzerdefinierten JSON-Deserializer für Gson?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!