我尝试了以下代码:
public class Member{
int age;
String name;
String eyeColor = blue;
Member (){
eyeColor = blue;
}
}
String newMembers="[{\"age\":\"43\",\"name\":\"Anne\"}]";
Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<Member>>() {}.getType();
ArrayList<Member> nMembrs = gson.fromJson(newMembers, listType);
创建一个包含Member'Anne'的新ArrayList,但即使使用构造函数,她的eyecolor = null。
我怎样才能做到这一点?
答案 0 :(得分:0)
FWIW,这可能是相关的Default Value when deserialized?:
如果你的类有一个默认的构造函数(即使是一个空的构造函数),你的 第一个模式(初始化实例变量所在的位置) 定义而不是在构造函数中)应该正常工作。如果你的班级 没有默认的构造函数,我相信(我可能是错的) Gson手动尝试分配对象,这将跳过任何对象 初始化。这实际上会在某些平台上失败(我 已经看到有关Android分配失败的帖子。
因此,应始终确保Gson构造的类具有默认值 构造。可能是将您显示的代码放在默认代码中 构造函数不是因为你移动代码而是因为 你有一个默认的构造函数。
答案 1 :(得分:0)
我尝试了你的代码(Windows上的Gson 2.2.4,JVM 1.7),但在你的例子中blue
根本没有定义。我定义了:
public static final String blue = "BLUE";
所以我得到了这个结果:
Member [age=43, name=Anne, eyeColor=BLUE]
所以我怀疑blue
是在某处定义但未初始化的,因为我检查了默认构造函数被调用。我还向int
添加了Members
ivar,并设置为0。
Gson使用Members
方法创建newInstance
(大致调用new Member()
),如果要在构造对象期间传递一些值,则需要使用InstanceCreator。