Originariamente inviato da
pspics
Io seguirei un'altra strada: invece di in stanziare l' oggetto e poi deserializzarlo in oggetto Jason, mandi una richiesta rest come per esempio ... ...../user/userid . La chiamata rest restituisce la rappresentazione Json di user con tutti i dati necessari e poi deserializzi. Devi modificare la risposta test in modo che comtenga anche l id.
Inviato da GT 9000 Cynomogen 10.1 con Tapatalk 2
ciao pspics, grazie mille per il tuo aiuto ;-)... quello che ho postato era solo un esempio, il mio obiettivo e' quello di deserializzare all'interno di un oggetto già istanziato che contiene dei dati...
Ho girato in rete e, tra le specifiche gson, viene indicato che non e' possibile deserializzare uno stream Json aggiornando un oggetto già istanziato... Cosi pensandoci bene sono arrivato ad una soluzione un po' sporca ma efficace per quello che serve a me... La posto così può tornare utile anche ad altri utenti...
all'interno dell'oggetto contenitore creo un metodo, ad esempio updatedata, che si aspetta come parametro un oggetto di tipo User. tale metodo si preoccuperà di aggiornare le variabili ricevute dalla deserializzazione dello stream da parte di gson
codice:
public class User implements Serializable{
private int IDUser;
private String Name;
private String Surname;
public String getIDUser() {
return IDUser;
}
public void setIDUser(String iduser) {
this.IDUser= IDUser;
}
public String getName() {
return Name;
}
public void setName(String name) {
this.Name= Name;
}
public String getSurname() {
return Surname;
}
public void setSurname(String surname) {
this.Surname= Surname;
}
public void updateData(User Object) {
this.Name= Object.Name;
this.Surname= Object.Surname;
}
}
Al momento della deserializzazione mi comporterò in questo modo
codice:
public void JSONProjectDes(){
User user = new User();
user.setIDUser(34);
System.out.println("IDUser: "+user.getIDUser());
System.out.println("Name: "+user.getName());
System.out.println("Surname: "+user.getSurname());
Gson gson = new Gson();
String userJson = gson.toJson(user);
// ...
// per semplificare la lettura ho eliminato la parte che effettua la richiesta http
// a questo punto invio la richiesta HTTP con il seguente JSON "{\"IDUser\" : 34}"
System.out.println(userJson);
System.out.println("");
System.out.println("");
// dalla richiesta http ricevo il seguente JSON che do in pasto alla libreria gson per effettuare la deserializzazione sullo stesso oggetto user già istanziato
String reader = "{\"Name\" : \"Mario\", \"Surname\" : \"Rossi\",}";
// in questo modo gson deserializza lo stream all'interno di un nuovo oggetto di tipo User, lo stesso oggetto lo passo per parametro al metodo updateData dell'oggetto User principale, che si preoccuperà di aggiornare le variabili.
user.updateData(gson.fromJson(reader, User.class));
System.out.println("IDUser: "+user.getIDUser());
System.out.println("Name: "+user.getName());
System.out.println("Surname: "+user.getSurname());
}
certo questo mi costringe a dover scrivere manualmente il codice che si preoccupa dell'aggiornamento delle variabili, ma pensandoci bene credo che sia più funzionale, perché si ha la possibilità di gestire eventuali condizioni