使用 GSON 反序列化 ArrayList



我有一个类Shop

public class Shop {
  private String name;
  private ArrayList<Fruitable> fruits;

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

Apple Orange 是实现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

但是,我可以在 Apple Orange 内部实现一些反序列化机制,以便它们自行反序列化吗?

如果这是不可能的,并且我必须在 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 类将具有以下内容:

   public class DealTime{
       @SerializedName("end")
       int end;
       @SerializedName("start")
       int start;
    }

您所要做的就是使用 Deal 对象强制转换 json 与 GSON 一起返回。希望这有帮助。

最新更新