Comment désérialiser une liste en utilisant GSON ou une autre bibliothèque JSON en Java?



1 Answers

Une autre méthode consiste à utiliser un tableau en tant que type, par exemple:

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

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

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

À mon humble avis, c'est beaucoup plus lisible.

Question

Je peux sérialiser une liste dans mon servlet sur GAE, mais je ne peux pas le désérialiser. Qu'est-ce que je fais mal?

C'est ma classe Video in GAE, qui est sérialisée:

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 vidéo de classe dans mon autre application, où j'essaie de désérialiser:

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

}



Soyez prudent en utilisant la réponse fournie par @DevNG. Arrays.asList () renvoie l'implémentation interne de ArrayList qui n'implémente pas certaines méthodes utiles comme add (), delete (), etc. Si vous les appelez, une exception UnsupportedOperationException sera levée. Pour obtenir une véritable instance de ArrayList, vous devez écrire quelque chose comme ceci:

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





Related



Tags

java java   json json   gson