Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

[GSON] deserializzare uno stream JSON all'interno di un oggetto istanziato

Discussione in 'Development' iniziata da pino8314, 26 Mar 2013.

  1. pino8314

    pino8314 Baby Droid

    Iscritto:
    5 Feb 2011
    Messaggi:
    28
    "Mi Piace":
    0
    Salve a tutti,
    ho iniziato da poco ad utilizzare la libreria gson di google per serializzare e deserializzare uno stream JSON. Avrei l'esigenza di deserializzare uno stream JSON all'interno di un oggetto già istanziato.

    creo un semplice esempio per capire meglio cosa intendo

    Di seguito l'oggetto che contiene i dati dell'utente. L'oggetto seguente contiene solamente l'IDUtente, il resto dei dati dovranno essere popolati a seguito di una richiesta http. Il risultato JSON della richiesta dovrà essere deserializzato all'interno dell'oggetto User già istanziato.

    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;
    	}
    			
    }
    

    All'interno di questo metodo istanzio l'oggetto User, setto l'ID e invio la richiesta HTTP

    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\",}";
    		
    		user= gson.fromJson(reader, User.class);
    
    		System.out.println("IDUser: "+user.getIDUser());
    		System.out.println("Name: "+user.getName());
    		System.out.println("Surname: "+user.getSurname());
    		
    	}
    
    Come già accennato su un commento, lo stream JSON ottenuto dalla richiesta HTTP vorrei deserializzarlo all'interno dello stesso oggetto user già istanziato. In questo modo vado a popolare la parte mancante delle variabili dell'oggetto. Purtroppo, deserializzando con gson.fromJson(reader, User.class);, gson popola le variabili Name e Surname ma setta a null la variabile IDUser. Questo perchè l'oggetto precedentemente istanziato, presumo venga distrutto e ricreato da gson nel momento in cui effettuo gson.fromJson(reader, User.class);.
    La domanda a questo punto è, è possibile deserializzare con gson uno stream JSON all'interno di un oggetto già esistente?

    grazie mille