序列化接口列表 GSON
2022-09-02 22:21:37
我在GSON中遇到了一些奇怪的行为。
如果我有以下类结构:
public interface Animal {
public void nothing();
}
public class Cat implements Animal {
private String name;
public Cat(String name) {
super();
this.name = name;
}
public Cat(){}
@Override
public void nothing() {
// TODO Auto-generated method stub
};
}
public class Dog implements Animal {
private String name;
public Dog(String name) {
super();
this.name = name;
}
public Dog(){}
@Override
public void nothing() {
// TODO Auto-generated method stub
};
}
我可以这样做:
ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(new Cat("Betty"));
animals.add(new Dog("Fred"));
System.out.println(gson.toJson(animals));
并获取此输出:
[{"name":"Betty"},{"name":"Fred"}]
但是,如果我放入一个包含类:animals
public class Container {
List<Animal> animals = new ArrayList<Animal>();
public void addAnimal(Animal a){
animals.add(a);
}
}
并致电:
Container container = new Container();
container.addAnimal(new Cat("betty"));
System.out.println(gson.toJson(container));
我得到:
{"animals":[{}]}
看起来GSON可以序列化接口的列表,当该列表本身,但是当该列表包含在另一个类中时,GSON就会出现问题。List<Interface>
知道我做错了什么吗?
作为旁注,我可以使用自定义反序列化程序将json字符串正确地反序列化为正确的类型。正是序列化给我带来了问题。
谢谢