随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

使用Gson+泛型制作一个序列化和反序列化的工具类

一、概述

  本节给出一个封装好的使用Gson实现对象、List集合的序列化与反序列化的工具类。

  1.Book.java类是一个javaben,里面定义了书本id和书本名称

  2.JsonUtil.java是工具类

  3.Test.java是测试类

二、具体实例

  1.Book.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.yw.gsonlib;
 
import com.google.gson.annotations.SerializedName;
 
/**
 * create by yangwei
 * on 2020-02-21 18:08
 */
public class Book {
    public Book(){}
    private String id;
    /**
     * 加上@SerializedName注解后服务端api返回name、bookName、Name、bn时,客户端都能够拿到正确的值给name属性。
     */
    @SerializedName(value = "bookName",alternate = {"Name","bn"})
    private String name;
 
    public Book(String id, String name) {
        this.id = id;
        this.name = name;
 
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

  2.JsonUtil.java工具类:使用此对象您可以把任意的可用对象转换为json字符串,也可以把json字符串转换为具体的对象或者List集合对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.yw.gsonlib;
 
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
 
import java.util.ArrayList;
import java.util.List;
 
 
/**
 * 泛型解析工具类
 * create by yangwei
 * on 2020-02-23 15:47
 */
public class JsonUtil {
    /**
     * 将json字符串转换为ArrayList
     *
     * @param jsonArray
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> fromJsonToList(String jsonArray, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        Gson gson = new Gson();
        JsonArray array = new JsonParser().parse(jsonArray).getAsJsonArray();
        for (JsonElement obj : array) {
            list.add(gson.fromJson(obj, clazz));
        }
        return list;
    }
 
    /**
     * 将字符串转换为Object对象
     *
     * @param jsonObj
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T fromJsonToObject(String jsonObj, Class<T> clazz) {
        Gson gson = new Gson();
        return gson.fromJson(jsonObj, clazz);
    }
 
 
    /**
     * 将Object对象转换成为Json字符串
     *
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String objectToJson(T obj) {
        Gson gson = new Gson();
        return gson.toJson(obj);
    }
}

  3.Test.java,使用main方法进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.yw.gsonlib;
 
import java.sql.SQLSyntaxErrorException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 测试json操作object的序列化和反序列化
 * create by yangwei
 * on 2020-02-23 19:03
 */
public class Test {
    public static void main(String[] args) {
        //准备数据
        List<Book> books = new ArrayList<>();
        books.add(new Book("1","《深入Java虚拟机》"));
        books.add(new Book("2","《大话数据结构》"));
        //准备一个jsonarray字符串,ps:将泛型集合转换为json字符串
        String json = JsonUtil.objectToJson(books);
        System.out.println("输出泛型集合字符串:"+json);
        //将字符串转换为泛型的List<Book>集合
        List<Book> bks = JsonUtil.fromJsonToList(json,Book.class);
        System.out.println("booklist_begin");
        for(Book b :bks){
            System.out.println(b.getName());
        }
        System.out.println("booklist_end");
 
        //将一个对象转换为字符串
        Book bk = new Book("1","《深入Android源代码》");
        String bkStr = JsonUtil.objectToJson(bk);
        System.out.println("book:"+bkStr);
 
        //讲一个json字符串转换为对象
        Book bks1 = JsonUtil.fromJsonToObject(bkStr,Book.class);
        System.out.println("打印book书名:"+bks1.getName());
    }
}

  4.具体的输出截图

 

 

 

  

  

  

posted on   飘杨......  阅读(1209)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示