使用 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)
}
}
Apple
和 Orange
是实现 [=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
但是,我可以在 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 class 将具有以下内容:
public class DealTime{
@SerializedName("end")
int end;
@SerializedName("start")
int start;
}
您所要做的就是使用 Deal 对象将 json 与 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)
}
}
Apple
和 Orange
是实现 [=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
但是,我可以在 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 class 将具有以下内容:
public class DealTime{
@SerializedName("end")
int end;
@SerializedName("start")
int start;
}
您所要做的就是使用 Deal 对象将 json 与 GSON 一起返回。 希望这可以帮助。