sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Gson的序列化和反序列化 Java对象序列化和反序列化
https://blog.csdn.net/qq_32938483/article/details/78878494

序列化和反序列化

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'
}
  • 1
  • 2
  • 3

Gson混淆规则:

# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。
-keep class com.example.bean.** { *; }
  • 1
  • 2

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);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

对象的序列化和反序列化

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);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
注意: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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

集合的序列化和反序列化

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这个类

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

常用的Gson转换也就这些了,有其他的需求,如自定义序列化器和反序列化器,就可以使用类GsonBuilder创建各种设置,如版本控制等Gson实例,个人博客Gson使用。欢迎大家来一起学习。

posted on 2022-03-21 12:47  sunny123456  阅读(628)  评论(0编辑  收藏  举报