【问题标题】:gson.fromJson return null valuesgson.fromJson 返回空值
【发布时间】:2016-05-26 11:19:23
【问题描述】:

这是我的 JSON 字符串:"{'userName' : 'Bachooo'}"

将 JSON 字符串转换为 LoginVO 逻辑是:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
LoginVO loginFrom  = gson.fromJson(jsonInString, LoginVO.class);
System.out.println("userName " + loginFrom.getUserName()); // output null

我的 LoginVO.class 是:

public class LoginVO {

 private String userName;
 private String password;

 public String getUserName()
 {
    return userName;
 }
 public void setUserName(String userName)
 {
    this.userName = userName;
 }
 public String getPassword()
 {
    return password;
 }
 public void setPassword(String password)
 {
    this.password = password;
 }

}

注意我使用的是jdk 1.8.0_92

loginForm.getUserName() 的输出是 NULL 而不是 "Bachooo" 关于这个问题有什么想法吗?

【问题讨论】:

  • 如果你只使用Gson gson = new Gson()会发生什么?
  • 如果我只在递归调用 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375) 时使用 Gson gson = new Gson() 无限循环跨度>
  • excludeFieldsWithoutExposeAnnotation 说什么? "只公开带注释的字段,忽略其余字段"
  • ^ 即单引号不是有效的 JSON。

标签: java json object gson


【解决方案1】:

由于您在GsonBuilder 上设置excludeFieldsWithoutExposeAnnotation() 配置,因此您必须在要序列化/反序列化的那些字段上放置@Expose 注释。

因此,为了让excludeFieldsWithoutExposeAnnotation() 序列化/反序列化您的字段,您必须添加该注释:

@Expose
private String userName;
@Expose
private String password;

或者,您可以从GsonBuilder 中删除excludeFieldsWithoutExposeAnnotation()

【讨论】:

  • 感谢他的工作 100% 我需要的全部 @Expose 我需要初始化的变量。
  • 或者,如果您无权编辑类,则另一种选择就是说 new GsonBuilder().create()
【解决方案2】:

请尝试这样。这是示例类:

class AngilinaJoile {
    private String name;

    // setter

    // getter  
}

下面是使用 Gson 反序列化它的方法:

Gson gson = new Gson();  
String jsonInString = "{'name' : 'kumaresan perumal'}";
AngilinaJoile angel = gson.fromJson(jsonInString, AngilinaJoile.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多