zoukankan      html  css  js  c++  java
  • 使用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.具体的输出截图

      

      

      

  • 相关阅读:
    hdu 5007 水题 (2014西安网赛A题)
    hdu 1698 线段树(成段替换 区间求和)
    poj 3468 线段树 成段增减 区间求和
    hdu 2795 公告板 (单点最值)
    UVaLive 6833 Miscalculation (表达式计算)
    UVaLive 6832 Bit String Reordering (模拟)
    CodeForces 124C Prime Permutation (数论+贪心)
    SPOJ BALNUM (数位DP)
    CodeForces 628D Magic Numbers (数位DP)
    POJ 3252 Round Numbers (数位DP)
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/12353343.html
Copyright © 2011-2022 走看看