1

我尝试了以下代码:

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);

创建了一个新的 ArrayList,其中包含成员“Anne”,但即使使用构造函数她的 eyecolor = null。

我怎样才能做到这一点?

4

2 回答 2

0

FWIW,这可能是反序列化时相关的默认值?

如果你的类有一个默认的构造函数(甚至是一个空的),你的第一个模式(初始化实例变量,而不是在构造函数中定义它们)应该可以正常工作。如果您的类没有默认构造函数,我相信(我可能是错的)Gson 手动尝试分配对象,这将完全跳过任何初始化。这实际上会在某些平台上失败(我已经看到有关 Android 分配失败的帖子)。

因此,您应该始终确保 Gson 构造的类具有默认构造函数。将您显示的代码放在默认构造函数中可能不是因为您移动了代码,而是因为您根本没有默认构造函数。

于 2013-09-23T22:11:23.387 回答
0

我尝试了您的代码(Windows 上的 Gson 2.2.4、JVM 1.7),但在您的示例blue中根本没有定义。我定义:

 public static final String blue = "BLUE";

所以我得到了这个结果:

 Member [age=43, name=Anne, eyeColor=BLUE]

所以我怀疑它blue在某处定义但没有初始化,因为我检查了默认构造函数是否被调用。我还添加了一个intivarMembers并设置为 0。

Gson create MembersusingnewInstance方法(大致调用new Member()),如果你想在对象的构造过程中传递一些值,你需要使用一个InstanceCreator

于 2013-09-24T06:13:10.127 回答