简单记录一下,要睡觉啦
工具类部分代码
public class JSONUtil {
private static final Gson GSON = new Gson();
// 静态调用, T是简单类型
public static <T> T fromJson(String json, Class<T> clz) {
return GSON.fromJson(json, clz);
}
public static String toJsonStr(Object obj) {
return GSON.toJson(obj);
}
public static <T> T fromJson(String json, TypeToken<T> tt) {
return GSON.fromJson(json, tt.getType());
}
}
实体类
public class Father {
private int a = 5;
private String b = "b";
private transient List<Integer> c = new ArrayList<>();
@Override
public String toString() {
return "Father{" +
"a=" + a +
", b='" + b + '\'' +
", c=" + c +
'}';
}
// 为证明与构造无关,这里无参有参的都提供
public Father(int a, String b) {
this.a = a;
this.b = b;
c.add(5);
}
public Father() { }
}
测试代码
public static void main(String[] args) {
Father f = new Father(1, "b");
String s = JSONUtil.toJsonStr(f);
System.err.println(s);
Father o = JSONUtil.fromJson(s, Father.class);
System.err.println(o);
}
输出结果
{“a”:1,“b”:“b”}
Father{a=1, b=‘b’, c=null}
当把字段c上的关键字transient去掉时,结果如下:
{“a”:1,“b”:“b”,“c”:[5]}
Father{a=1, b=‘b’, c=[5]}
还有很多测试代码,懒得贴了,自己去尝试验证吧
结论如下:
使用transient修饰某个属性时,gson在创建此对象实例时,会将此字段赋空,该过程发生在类的初始化之后。所以,即使类初始化过程中对该字段进行了赋值也是无效的。