序列化和反序列化
Java序列化是指把Java对象转换为可传输的字节序列的过程;而Java反序列化是指把传输的字节序列恢复为Java对象的过程。这两个过程使我们非常方便的存储和传输数据。
Gson概述
Gson是一个Java库,可用于将Java对象转换为JSON表示,它也可以用来将JSON字符串转换为等效的Java对象。使用的主要类是Gson,可以通过调用创建new Gson(),Gson实例在调用Json操作时不保持任何状态,所以,你可以自由地重复使用同一个对象来进行多个Json序列化和反序列化操作。
Gson的使用
AS Gradle 导包:
dependencies {
compile 'com.google.code.gson:gson:2.8.2'
}
Gson混淆规则:
# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。
-keep class com.example.bean.** { *; }
Gson 基本使用
// 序列化
Gson gson = new Gson();
gson.toJson(1); // ==> 1
gson.toJson("json"); // ==> "json"
gson.toJson(new Long(123)); // ==> 123
int[] values = { 1 };
gson.toJson(values); // ==> [1]
// 反序列化
int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String[] anotherStr = gson.fromJson("[\"abc\"]", String[].class);
对象的序列化和反序列化
class UserInfo {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
UserInfo() {
}
}
//序列化
UserInfo user = new UserInfo();
String json = new Gson().toJson(user);
// ==> json is {"value1":1,"value2":"abc"}
//反序列化
UserInfo user = new Gson().fromJson(json, UserInfo.class);
注意:transient当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。
数组序列化和反序列化
Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};
// 序列化
gson.toJson(ints); // ==> [1,2,3,4,5]
gson.toJson(strings); // ==> ["abc", "def", "ghi"]
// 反序列化
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);
// ==> ints2 will be same as ints
集合的序列化和反序列化
Gson gson = new Gson();
List list = new ArryList();
list.add(1);
list.add(2);
list.add(3);
// 序列化
String json = gson.toJson(ints); // ==> json is [1,2,3]
// 反序列化
List<String> name = new Gson().fromJson(json, new TypeToken<List<String>>() {}.getType());
//这里需要使用TypeToken这个类
常用的Gson转换也就这些了,有其他的需求,如自定义序列化器和反序列化器,就可以使用类GsonBuilder创建各种设置,如版本控制等Gson实例,CSDN博客版本。