Gson如何反序列化null对象属性

时间:2012-09-06 19:10:22

标签: java json gson

我有一些json,其中一系列条目看起来像这样(我已将其简化为相关问题,这就是为什么它看起来有点多余):

  

{" name":" ISPC Seychelles"," company":{" name":" ISPC   塞舌耳"" ID":3427640}}

但有时公司属性设置为null:

  

{" name":" Westin Miyako Kyoto"," company":null}

我已经定义了这样的类(抱歉公共访问修饰符,当我让这段代码工作时会改变这些:)):

class Entry {
  public String name=;
  public Company company;
  public String toString() {
      return  name + ";" + company;
  }
}

class Company {
    public String name;
    public int id;
    public String toString() {
        return "Company: " + name;
    }
}

在我的代码中,我尝试使用gson反序列化名为output的变量中包含的JSON:

while ((output = br.readLine()) != null) {
    Gson gson = new Gson();
    Reply reply = gson.fromJson(output, Reply.class); 
    Entry[] entries = reply.entries;
    for (int i=0; i < entries.length; i++) {
        System.out.print(entries[i]+ "\n") ;
    }
}

当在JSON中的第一个示例中填充公司元素时,这可以正常工作:

  

ISPC Seychelles;公司:ISPC Seychelles

但是,如果未按第二个示例填充元素,则会得到以下输出:

  

京都威斯汀都酒店;空

我想要的是以下输出:

  

京都威斯汀都酒店;公司:null

1 个答案:

答案 0 :(得分:0)

toString()的{​​{1}}表示由Company对象控制,因此如果Company对象为空,则无法获得所需的表示。唯一的方法是在Company班级Entry中添加以下内容:

toString()