Gson 的两个注解 @Expose @SerializedName

2,172 阅读1分钟
这两个注解可以在序列化和反序列化的时候使用。
简单的说 序列化 就是把实体类转json(多传给后台用)

               反序列化 就是将json转成需要的实体类(后台给前台的数据)

在反序列化的时候 前后端定义的字段名不一样 可以使用@SerializedName

在序列化的时候 前端给后台的数据不需要实体类中的一些字段 可使用 @Expose

1.反序列化的时候 如字段名大小写不一致 或者完全不一样 如DataModel 中使用@SerializedName("planno") 、 @SerializedName(value = "consid", alternate = {"cons_id"})

@SerializedName(value = "consid", alternate = {"cons_id"})这个是后台多个字段都对应前台的一个字段 如果后台的这两个字段都有值 用后面的一个字段 "cons_id"的值。

2. 序列化的时候 去掉一些字段 如DataModel 中使用 

@Expose(serialize = false) 序列化设置false 既可以去掉这个字段

@Expose() 默认true 保留字段

序列化方法注意:

private String listToJson(List<DataModel> dataList) {
    GsonBuilder builder = new GsonBuilder();
    builder.excludeFieldsWithoutExposeAnnotation();
    Gson gson = builder.create();
    String json = gson.toJson(dataList);
    return json;
}