Désérialiseur JSON personnalisé pour Gson
Lors de la réception de données JSON avec des structures personnalisées, le processus de désérialisation par défaut de Gson peut ne pas suffire. Dans de tels cas, un désérialiseur personnalisé est nécessaire.
Considérez la classe Java suivante représentant un utilisateur :
public class User { int id; String name; Timestamp updateDate; }
Et une structure JSON représentant une liste d'utilisateurs :
[{"id":1,"name":"Jonas","update_date":"1300962900226"}, {"id":5,"name":"Test","date_date":"1304782298024"}]
Pour désérialiser ce JSON en instances utilisateur, un désérialiseur personnalisé peut être défini :
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)); } }
Ceci le désérialiseur analyse le JSON dans une instance utilisateur, en tenant compte des noms de champs spécifiés et de l'analyse de l'horodatage personnalisé.
Pour appliquer ce désérialiseur à l'instance Gson, utilisez la méthode registerTypeAdapter :
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(User.class, new UserDeserializer()); Gson gson = gsonBuilder.create();
Désormais, le JSON peut être désérialisé en une liste d'instances utilisateur à l'aide de l'instance Gson modifiée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!