我在GSON中遇到了一些奇怪的行爲。序列化接口列表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可序列化的接口List<Interface>
的名單,但是當被包含在列表在另一課上,GSON有問題。
任何想法我做錯了什麼?
作爲一個方面說明,我可以正確地反序列化JSON字符串使用自定義解串器正確的類型。這是序列化,給我的問題。
感謝
您可以隨時獲取Gson源代碼並查看它們實際上在該方法中執行的操作。 – 2011-05-10 21:42:50