使用 GSON 反序列化 ArrayList<Interface>

Deserializing ArrayList<Interface> using GSON

我有一个classShop

public class Shop {

  private String name;
  private ArrayList<Fruitable> fruits;


  public String toJson() {
     Gson gson = new Gson();
     return gson.toJson(this, Shop.class) 
  }   

}

AppleOrange 是实现 [=53 的两个 classes =]Fruitable界面.

Fruitable:

public interface Fruitable {
   String getColor();
}

Apple:

public class Apple implements Fruitable {

 private int Id;     

 @Override
 public String getColor() {
    return "red";
  }

 }

Orange:

 public class Orange implements Fruitable {

 private int Id;

 @Override
 public String getColor() {
    return "orange";
  }

 }

我可以使用 GSON 序列化 Shop,但是,我无法正确反序列化它。

当我反序列化时,ArrayList<Fruitable> 有对象,但对象是 null

这是因为 GSON 需要一个具体的实例来反序列化。

我知道我可以在 Shop.

中实现 JsonDeserializer

但是,我可以在 AppleOrange 中实现一些反序列化机制,这样它们就会反序列化他们自己?

如果那是不可能的,我必须在Shop中写一个反序列化器,我可以编写代码来反序列化fruits 属性 而不是其他属性,即GSON 将反序列化其余属性,假设它们是具体实例?

好的,所以你应该使用 GSON 注释,它们会让你的生活变得更轻松。 一个例子:

public class Deal{

   @SerializedName("name")
   String name;

   @SerializedName("times")
   List<DealTime> times;

}

回来的json大概是这样的:

{
   name:dave,
   times[
     {
      end:400,
      start:200
     },
     {
      end:30,
      start:500
     }
   ]
}

那么您的 DealTime class 将具有以下内容:

   public class DealTime{

       @SerializedName("end")
       int end;

       @SerializedName("start")
       int start;

    }

您所要做的就是使用 Deal 对象将 json 与 GSON 一起返回。 希望这可以帮助。