2013-09-23 30 views
1

我尝试下面的代码:如何在Java中使用'default'类属性来解码json字符串?

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创建包含会员“安妮”,但即使有构造她眼睛颜色= NULL。

我怎样才能做到这一点?

+0

'quantityOfToes'不能为空(因为它不从JSON萃取重新分配,它应该是10仍)。 – user2246674

+0

''int''?那应该怎么做''null''? – qqilihq

+0

你确定它是空的吗?这是一个'int',它怎么可能是空的? – Avi

回答

0

FWIW,这可能是相关Default Value when deserialized?

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

所以你应该始终确保Gson构造的类有一个默认的 构造函数。这可能是因为把你在默认 构造显示,代码工作不是因为你搬来搬去的代码,但因为 你有一个默认的构造函数都没有。

0

我试过你的代码(Gson 2.2.4,Windows上的JVM 1.7),但在你的例子中blue根本没有定义。我定义:

public static final String blue = "BLUE"; 

,所以我得到了这样的结果:

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

所以我怀疑blue某处定义,但因为我检查了默认构造函数被调用时未初始化。我还添加了一个int伊娃到Members,并设置为0。

GSON使用newInstance方法(大致调用new Member()),如果你想建设目标的过程中通过一些价值创造Members,你需要使用一个InstanceCreator