Désérialisation d'une carte & lt; String, Object & gt; domaine avec Gson
J'ai un objet Utilisateur avec cette structure:
class User {
private String id;
private String name;
private Map<String, Object> properties;
//GETTERS & SETTERS
}
J'ai une Chaîne JSON avec cette structure:
{
"user": {
"id:"123456789",
"name:"azerty",
"emailHash":"123456789", //not used in User class
"properties": {
"p1":1,
"p2":"test",
"p3":[1, 2, 3, 4],
"p4":{
etc...
}
}
}
}
Propriétés clés des chaînes de caractères, des Propriétés des valeurs peut être un String, int, Tableau, boolean, Carte etc.
J'essaie de désérialiser cette chaîne JSON avec Gson comme ça:
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonString);
JsonObject object = element.getAsJsonObject();
GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = builder.create();
User user = (User) gson.fromJson(object.get("user"), new TypeToken<User>() {}.getType());
Champs 'id' et 'nom' sont correctement injectés mais le champ "propriétés" reste nulle.
Savez-vous ce que je fais mal?
Merci d'avance pour votre aide!
source d'informationauteur Franck Yapadesouci Anso | 2013-01-10
Vous devez vous connecter pour publier un commentaire.
Pour moi ce code:
Imprime ce:
Cependant, gardez à l'esprit que j'ai enlevé l'emballage d'objet json dans le fichier que j'ai analyser. Le fichier est:
Aussi j'ai ajouté des guillemets fermants pour
name
etid
que vous n'avez pas dans votre échantillon.La
User
classe comme demandé par l'OP. J'ai ajouté des getters et setters pour la raison de l'impression: