2016-06-20 1 views
0

je dois sérialisation mes cours à ce format à envoyer au serveur sur une requête POST:La sérialisation GSon échappe à mes clés, pourquoi?

{ 
    "user": { 
    "id": "myId", 
    "token": "myToken" 
    } 
} 

mais quand je visite le résultat du serveur de la bibliothèque GSOn conserve échapper les clés et le serveur tombe en panne depuis le JSON y arrive malformé. Voici la réponse du serveur:

Parameters: {"user"=>"{\"id\":\"myId\",\"token\":\"myToken\"}"} 

Et voici comment je sérialisation le code:

public class UserTest { 
    @SerializedName("user") 
    public UserDataTest user; 
} 

public class UserDataTest { 

    UserDataTest(){}; 

    @SerializedName("id") 
    public String id; 

    @SerializedName("token") 
    public String token; 
} 

et je teste comme ceci:

UserTest newUser = new UserTest(); 
UserDataTest tmp = new UserDataTest(); 
tmp.id = "myId"; 
tmp.token = "myToken"; 
newUser.user = tmp; 
Gson gson = new Gson(); 
String json = gson.toJson(newUser); 
JSONObject params = new JSONObject(); 
params.put("user", json); 

// now I do a POST to the server 

Quelqu'un peut-il repérer la problème? THX!

+0

Peut-être la cl ass doit mettre en œuvre sérialisable? La classe publique UserTest implémente Serializable { – RicardoVallejo

+0

non, la séralisation n'est pas correcte ... –

Répondre

0

Modifier les POJO les classes et l'adapter à ceci:

Notez que si l'attribut des objets ont le même nom que la touche JSON, vous pouvez omettre le @SerializedName("id"), car cela sera prise par Gson par défaut ...

class UserDataTest { 
    public String id; 
    public String token; 
    public UserDataTest(String id, String token) { 
    this.id = id; 
    this.token = token; 
    } 
} 

class UserTest { 
    public UserDataTest user; 
    public UserTest(UserDataTest userDataTest) { 
    this.user = userDataTest; 
    } 
} 

test:

public static void main(String[] args) { 
     UserTest newUser = new UserTest(new UserDataTest("myId", "myToken")); 
     Gson gson = new Gson(); 
     String json = gson.toJson(newUser); 
     System.out.println(json); 
    }