如何在java中使用'default'类属性解码json字符串?

时间:2013-09-23 21:58:50

标签: java json gson

我尝试了以下代码:

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。

我怎样才能做到这一点?

2 个答案:

答案 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