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


一、概述

  本節給出一個封裝好的使用Gson實現對象、List集合的序列化與反序列化的工具類。

  1.Book.java類是一個javaben,里面定義了書本id和書本名稱

  2.JsonUtil.java是工具類

  3.Test.java是測試類

二、具體實例

  1.Book.java

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集合對象

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方法進行測試

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.具體的輸出截圖

 

 

 

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM