序列化和反序列化

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博客版本