144 votes

Comment désérialiser une LISTE en utilisant GSON ou un autre JSON en Java ?

Je peux sérialiser une liste dans mon servlet sur GAE.

Mais je n'arrive pas à le désérialiser.

Quelqu'un peut-il m'aider, s'il vous plaît ?

C'est ma vidéo de classe en GAE :

package legiontube;

import java.util.Date;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Video {

    @PrimaryKey
    private String id;

    @Persistent
    private String titulo;

    @Persistent
    private String descricao;

    @Persistent
    private Date date;

 /\*\*
  \* @param id
  \* @param titulo
  \* @param descricao
  \* @param date
  \*/

    public Video(){};

 public Video(String id, String titulo, String descricao, Date date) {
  //super();
  this.id = id;
  this.titulo = titulo;
  this.descricao = descricao;
  this.date = date;
 }

 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }

 public String getTitulo() {
  return titulo;
 }

 public void setTitulo(String titulo) {
  this.titulo = titulo;
 }

 public String getDescricao() {
  return descricao;
 }

 public void setDescricao(String descricao) {
  this.descricao = descricao;
 }

 public Date getDate() {
  return date;
 }

 public void setDate(Date date) {
  this.date = date;
 }

}

C'est ma classe Vidéo dans mon autre application :

package classes;

import java.util.Date;

public class Video {
 private String id;
 private String titulo;
 private String descricao;
 private Date date;

 /\*\*
  \* @param id
  \* @param titulo
  \* @param descricao
  \* @param date
  \*/
 public Video(String id, String titulo, String descricao, Date date) {
  //super();
  this.id = id;
  this.titulo = titulo;
  this.descricao = descricao;
  this.date = date;
 }

 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getTitulo() {
  return titulo;
 }
 public void setTitulo(String titulo) {
  this.titulo = titulo;
 }
 public String getDescricao() {
  return descricao;
 }
 public void setDescricao(String descricao) {
  this.descricao = descricao;
 }
 public Date getDate() {
  return date;
 }
 public void setDate(Date date) {
  this.date = date;
 }

}

Meilleures salutations, Valter Henrique.

373voto

ColinD Points 48573

Avec Gson, il vous suffit de faire quelque chose comme :

List<Video> videos = gson.fromJson(json, new TypeToken<List<Video>>(){}.getType());

Vous pouvez également avoir besoin de fournir un constructeur sans argument sur l'objet Video vers laquelle vous désérialisez. Quel est le problème spécifique que vous rencontrez avec la désérialisation ?

128voto

DevNG Points 753

Une autre façon est d'utiliser un tableau comme type, par exemple :

Video[] videoArray = gson.fromJson(json, Video[].class);

De cette façon, vous évitez tout le tracas de l'objet Type, et si vous avez vraiment besoin d'une liste, vous pouvez toujours convertir le tableau en liste, par exemple :

List<Video> videoList = Arrays.asList(videoArray);

A mon avis, ceci est beaucoup plus lisible.

5voto

Joel Points 59

FYI, Depuis la version 1.7 de Gson, le constructeur no-args n'est plus nécessaire. Voir http://groups.google.com/group/google-gson/browse_thread/thread/6272c9be58676e47#

Bon codage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X