如何在Java中使用GSON或其他JSON库反序列化列表?
我可以在GAE上的序列化我的servlet列表,但我不能反序列化它。 我究竟做错了什么?
这是我的课堂video在GAE,这是连载:
包军团;
 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)
公开课video{
     @首要的关键
    私人stringID;
     @Persistent
    私人stringtitulo;
     @Persistent
    私人stringdescricao;
     @Persistent
    私人datedate;
  / **
   * @参数ID
   * @param titulo
   * @param descricao
   * @参数date
   * /
     public Video(){};
  public Video(String id,String titulo,String descricao,Date date){
   //超();
   this.id = id;
   this.titulo = titulo;
   this.descricao = descricao;
   this.date = date;
  }
  public String getId(){
  返回ID;
  }
  public void setId(String id){
   this.id = id;
  }
  public String getTitulo(){
  返回titulo;
  }
  public void setTitulo(String titulo){
   this.titulo = titulo;
  }
  public String getDescricao(){
  返回descricao;
  }
  public void setDescricao(String descricao){
   this.descricao = descricao;
  }
  public Date getDate(){
  归期;
  }
  public void setDate(Date date){
   this.date = date;
  }
 }
这是我在我的其他应用程序的video,我尝试反序列化:
包类;
 import java.util.Date;
公开课video{
 私人stringID;
 私人stringtitulo;
 私人stringdescricao;
 私人datedate;
  / **
   * @参数ID
   * @param titulo
   * @param descricao
   * @参数date
   * /
  public Video(String id,String titulo,String descricao,Date date){
   //超();
   this.id = id;
   this.titulo = titulo;
   this.descricao = descricao;
   this.date = date;
  }
  public String getId(){
  返回ID;
  }
  public void setId(String id){
   this.id = id;
  }
  public String getTitulo(){
  返回titulo;
  }
  public void setTitulo(String titulo){
   this.titulo = titulo;
  }
  public String getDescricao(){
  返回descricao;
  }
  public void setDescricao(String descricao){
   this.descricao = descricao;
  }
  public Date getDate(){
  归期;
  }
  public void setDate(Date date){
   this.date = date;
  }
 }
	
有了Gson,你只需要做一些事情:
List<Video> videos = gson.fromJson(json, new TypeToken<List<Video>>(){}.getType());  您可能还需要在要反序列化的Video类上提供无参数构造函数。 
另一种方法是使用数组作为types,例如:
 Video[] videoArray = gson.fromJson(json, Video[].class); 
这样可以避免Type对象带来的麻烦,如果你真的需要一个列表,你总是可以把数组转换成列表,例如:
 List<Video> videoList = Arrays.asList(videoArray); 
恕我直言,这是更可读。
试试这一行
 List<Video> videos = Arrays.asList(new Gson().fromJson(json, Video[].class)); 
参考:
- 方法数组#asList
- 构造函数Gson
-  方法Gson#fromJson (源json可能是JsonElement,Reader或String)
- 接口列表
- JLS – arrays
- JLS – 通用接口
小心使用@DevNG提供的答案。 Arrays.asList()返回ArrayList的内部实现,它不提供像add(),delete()等一些有用的方法。为了得到真正的ArrayList实例,你需要写这样的东西:
 List<Video> = new ArrayList<>(Arrays.asList(videoArray));