关于Gson和Java模型类的问题

时间:2018-06-14 14:46:52

标签: java gson android

我正在使用Gson在json和java对象之间进行转换。

让我们说json是这样的:

{
    "name": "John",
    "age": 12,
    "adult": false
}

json的类是:

public class Student {
  @Expose
  @SerializedName("name")
  private String name;
  private int age;
  private boolean adult;

  // setters for all fields above
  public void setName(String name) {
     this.name = name;
  }
  ...

  // getters for all fields above
  public String getName() {
     return name;
  }
  ...
}

我的问题是:

  1. 是否所有在json中显示的字段都应该有@Expose注释?这是否也意味着我们可以拥有不属于json字符串的其他字段?

  2. 是否仅当json中的字段名称和java类中的变量名称不同时才需要使用@SerializedName注释,否则它是可选的?

  3. 字段的java类中是否需要 setter 函数?

1 个答案:

答案 0 :(得分:0)

您的问题的简短答案是1.是,2。是,3。否。

Gson有很多内容 - 你的学生班需要很少的工作才能完成它的工作:

  • 与JSON中的键值匹配的数据成员(区分大小写!)
  • 公共getter方法

您可以让更多数据成员不必与JSON中的键名匹配,当null处理数据时,他们最终会设置为Gson。只要变量名与JSON中的键名匹配,Gson也不需要任何注释。如果您需要其他功能,则可以使用任何类型的setter方法(Gson没有)。基本上,Gson唯一要找的是匹配键的数据成员和getter方法。您的课程是否更复杂取决于您和您的应用程序需要什么。

修改Gson处理的所有值都属于String类型。如果您有intboolean类型,则需要将输入作为String进行处理,并对其进行操作以将其转换为您要查找的内容。