• 使用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.具体的输出截图

      

      

      

  • 相关阅读:
    如何停止CLOSE_WAIT端口:How do I remove a CLOSE_WAIT socket connection
    HttpServer:JDK 内置的轻量级 HTTP 服务器
    Create a git patch from the uncommitted changes in the current working directory
    mac Zip 常用命令
    Mac下php服务部署
    [转]Linux Programming Made Easy – A Complete Guide With Resources For Beginners
    【转】kubevirt在360的探索之路(k8s接管虚拟化)
    【转】KubeSphere 多集群管理大招:使用 QKE 管理多个 ACK 集群
    [转]深入理解CNI(容器网络接口)
    【转】再谈自研开源KubeOVN, 设计思路及实现原理
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/12353343.html
Copyright © 2020-2023  润新知