我有一个类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 一起返回。希望这有帮助。