Java中GSON的使用(内含源代码)

news2024/11/30 10:30:09

Java中GSON的使用(内含源代码)

源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87474951

目录

  • Java中GSON的使用(内含源代码)
  • `源代码下载链接地址:`[https://download.csdn.net/download/weixin_46411355/87474951](https://download.csdn.net/download/weixin_46411355/87474951)
    • 1.1 GSON简介
    • 1.2 JavaBean序列化/反序列化
      • 1.2.1 步骤说明
        • 普通JavaBean
        • 嵌套JavaBean
    • 1.3 数组和List的序列化/反序列化
      • 1.3.1 数组的序列化/反序列化
      • 1.3.2 List集合的序列化/反序列化
    • 1.4 Set和Map的序列化/反序列化
      • 1.4.1 Set集合的序列化/反序列化
      • 1.4.2 Map集合的序列化/反序列化
    • 1.5 Map的value为null时的序列化/反序列化
    • 1.6 控制序列化/反序列化的变量名称
      • 1.6.1 JavaBean
        • job类
        • User类
      • 1.6.2 测试类以及测试效果1
      • 1.6.3 测试类以及测试效果2

1.1 GSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串转成一个Java对象(反序列化),或者反过来(序列化)。

GSON地址:google/gson (github.com)

Android引入GSON:

implementation ‘com.google.code.gson:gson:2.9.0’

1.2 JavaBean序列化/反序列化

1.2.1 步骤说明

  1. 导入Gson的jar包
  2. 创建JavaBean为User(String username,String password,int age,boolean
    isStudent)
  3. 实例化JavaBean对象user1
  4. 创建GSON对象gson
  5. 利用gson对象进行JavaBean的序列化
  6. 利用gson对象进行JavaBean的反序列化

下载gson的jar包,这里笔者提供笔者的gson jar包的下载链接地址:https://download.csdn.net/download/weixin_46411355/87474404

创建一个JavaSe项目,在项目中创建一个lib目录,将这个jar包放进lib目录
鼠标右键jar包,点击Add as Library 即可

普通JavaBean

JavaBean
User.java对象

package _1JavaBean序列化和反序列化._01普通JavaBean;

import com.sun.jmx.snmp.mpm.SnmpMsgTranslator;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private int age;
    boolean isStudent;

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent);
    }
}


测试类

package _1JavaBean序列化和反序列化._01普通JavaBean;

import com.google.gson.Gson;

public class TestJavaBean {
    public static void main(String[] args) {
        User user1 = new User("zhangsan", "123", 18, false);
        Gson gson = new Gson();//创建Gson对象

        String userJson = gson.toJson(user1);//序列化
        System.out.println("序列化:" + userJson);

        User user2 = gson.fromJson(userJson, User.class);//反序列化
        System.out.println("反序列化:" + user2);
    }

}


测试效果
在这里插入图片描述

嵌套JavaBean

在普通JavaBean的基础上创建Job(String name,BigDecimal salary),并在User对象中添加Job属性

Job.java

package _1JavaBean序列化和反序列化._02嵌套JavaBean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Objects;

public class Job implements Serializable {

    private String name;
    private BigDecimal salary;

    public Job() {
    }

    public Job(String name, BigDecimal salary) {
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Job{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Job job = (Job) o;
        return Objects.equals(name, job.name) &&
                Objects.equals(salary, job.salary);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, salary);
    }
}


User.java


package _1JavaBean序列化和反序列化._02嵌套JavaBean;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private int age;
    boolean isStudent;

    private Job job;

    public Job getJob() {
        return job;
    }

    public void setJob(Job job) {
        this.job = job;
    }

    public User(String username, String password, int age, boolean isStudent, Job job) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
        this.job = job;
    }

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent);
    }
}

测试类

package _1JavaBean序列化和反序列化._02嵌套JavaBean;

import com.google.gson.Gson;

import java.math.BigDecimal;

public class TestNestedJavaBean {
    public static void main(String[] args) {
        User user1 = new User("zhangsan","123",18,false);
        Gson gson = new Gson();//创建Gson对象
        Job job = new Job("自有职业",new BigDecimal(2500.00));
        user1.setJob(job);

        String user1Json = gson.toJson(user1);//序列化
        System.out.println("序列化:"+user1Json);

        User user2 = gson.fromJson(user1Json, User.class);
        System.out.println("反序列化:"+user2);

    }
}

测试效果
在这里插入图片描述

1.3 数组和List的序列化/反序列化

1.3.1 数组的序列化/反序列化

数组类型对象和普通对象一样,使用toJson/fromJson即可完成序列化与反序列化。

JavaBean
User.java

package _2数组和List的序列化和反序列化._01数组的序列化和反序列化;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private int age;
    boolean isStudent;

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent);
    }
}

测试类

package _2数组和List的序列化和反序列化._01数组的序列化和反序列化;

import com.google.gson.Gson;

public class TestArray {
    public static void main(String[] args) {
        User[] users1 = new User[3];
        users1[0] = new User("zhangsan","123",18,false);
        users1[1] = new User("lisi","333",20,true);
        Gson gson = new Gson();//创建GSON对象

        String users1Json = gson.toJson(users1);//序列化
        System.out.println("序列化:"+users1Json);

        User[] users2 = gson.fromJson(users1Json,User[].class);//反序列化
        System.out.println("反序列化0:"+users2[0].getUsername());
        System.out.println("反序列化1:"+users2[1]);
        System.out.println("反序列化2:"+users2[2]);
    }
}



测试效果
在这里插入图片描述

1.3.2 List集合的序列化/反序列化

List集合类型对象需要注意的是,在反序列化时因为Java是伪泛型,泛型擦除会导致无法反序列化为List,需要使用TypeToken完成反序列化。

javabean
User.java

package _2数组和List的序列化和反序列化._02List集合的序列化和反序列化;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private int age;
    boolean isStudent;

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent);
    }
}

测试类

package _2数组和List的序列化和反序列化._02List集合的序列化和反序列化;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class TestList {
    public static void main(String[] args) {
        List<User> userList1 = new ArrayList<>();
        userList1.add(new User("zhangsan", "123", 18, false));
        userList1.add(new User("lisi", "333", 20, true));
        Gson gson = new Gson();//创建Gson对象

        String userList1Json = gson.toJson(userList1);//序列化
        System.out.println("序列化:" + userList1Json);

        Type type = new TypeToken<List<User>>() {
        }.getType();//泛型类型,import com.google.gson.reflect.TypeToken;
        List<User> userList2 = gson.fromJson(userList1Json, type);//反序列化
        System.out.println("反序列化0:"+userList2.get(0).getUsername());
        System.out.println("反序列化1:"+userList2.get(1));
    }
}

测试结果
在这里插入图片描述

1.4 Set和Map的序列化/反序列化

Set集合类型和Map集合类型对象在反序列化时与List一样,需要使用TypeToken完成反序列化。

1.4.1 Set集合的序列化/反序列化

javabean
User.java

package _3Set和Map的序列化和反序列化._01Set集合的序列化和反序列化;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private int age;
    boolean isStudent;

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent);
    }
}

测试类

package _3Set和Map的序列化和反序列化._01Set集合的序列化和反序列化;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Set;

public class TestSet {
    public static void main(String[] args) {
        Set<User> userSet1 = new HashSet<>();
        userSet1.add(new User("zhangsan","123",18,false));
        userSet1.add(new User("lisi","333",20,true));
        userSet1.add(null);
        Gson gson = new Gson(); //创建GSON对象

        String userSet1Json = gson.toJson(userSet1);//序列化
        System.out.println("序列化:"+userSet1Json);

        Type type = new TypeToken<Set<User>>() {
        }.getType();//泛型类型,import com.google.gson.reflect.TypeToken;

        Set<User> userSet2 = gson.fromJson(userSet1Json, type);//反序列化
        for (User user : userSet2) {
            System.out.println(user);
        }
    }
}

测试效果
在这里插入图片描述

1.4.2 Map集合的序列化/反序列化

javabean
User.java

package _3Set和Map的序列化和反序列化._02Map集合的序列化和反序列化;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private int age;
    boolean isStudent;

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent);
    }
}

测试类

package _3Set和Map的序列化和反序列化._02Map集合的序列化和反序列化;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

public class TestMap {
    public static void main(String[] args) {
        Map<String,User> userMap1 = new HashMap<>();
        userMap1.put("1",new User("zhangsan","123",18,false));
        userMap1.put("2",new User("lisi","333",20,true));
        userMap1.put("3",null);
        userMap1.put(null,null);
        Gson gson = new Gson();//參加Gson对象

        String userMap1Json = gson.toJson(userMap1);//序列化
        System.out.println("序列化:"+userMap1Json);

        Type type = new TypeToken<Map<String, User>>(){}.getType();//泛型类型   import com.google.gson.reflect.TypeToken;
        Map<String,User> userMap2 = gson.fromJson(userMap1Json, type);//反序列化
//        for (Object user : userMap2.entrySet()) {
//            System.out.println(user);
//        }

        userMap2.entrySet().forEach(System.out::println);


    }
}

测试结果
在这里插入图片描述

1.5 Map的value为null时的序列化/反序列化

如果一个Map的value为NULL,那么按照GSON默认的处理为忽略这个map项

1.6 控制序列化/反序列化的变量名称

如果希望JSON字符串字段名不以变量名作为Key,比如SON字符串中的Key存在Java中的关键字时,可以借助@SerializedName注解控制JSON字段中Key的命名

如果希望指定GSON对某些字段配置是否参与序列化与反序列化可以使用@Expose注解控制,同时使用GsonBuilder创建Gson对象:

另外直接使用transient关键字修饰的变量,也可以让该变量不参与序列化/反序列化

之前,我们都是假设 model字段都是需要序列化和反序列化的,这是一种最简单的情况,可真实的情况并不是如此,所以我们需要定制我们的解析规则。从而引出@Expose注解。

@Expose注解
当你不需要完全序列化model字段时,我们就可以使用@Expose来帮我解决。

查看@Expose的源码如下
在这里插入图片描述
@Expose默认有两个属性:serialize(是否序列化) 和 deserialize(是否反序列化),默认值都为true。如果你给字段设置了@Expose注解,但是没有设置serialize和deserialize,那model的字段都将会输出。

transient
使用transient来描述字段,将不能被序列化和反序列化

@SerializedName(“XXX”)
使用@SerializedName(“XXX”)注解可以实现以"XXX"作为字段名

1.6.1 JavaBean

job类

package _4控制序列化和反序列化的变量名称;

import com.google.gson.annotations.Expose;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Objects;

public class Job implements Serializable {

    @Expose
    private String name;
    @Expose
    private BigDecimal salary;

    public Job() {
    }

    public Job(String name, BigDecimal salary) {
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Job{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Job job = (Job) o;
        return Objects.equals(name, job.name) &&
                Objects.equals(salary, job.salary);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, salary);
    }
}

User类

package _4控制序列化和反序列化的变量名称;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.Objects;

public class User {

    @Expose
    private String username;

    @Expose
    private String password;

    @Expose
    private int age;

    @Expose
    private boolean isStudent;

    @Expose
    private Job job;

    //serialize:是否参与序列化,deserialize是否参与反序列化
    @Expose(serialize = false,deserialize = false)
    private int test1;

    //使用transient来描述字段,将不能被序列化和反序列化
    private transient int test2;

    //使用@SerializedName("class")注解可以实现以"class"作为字段名
    @Expose
    @SerializedName("class")
    private int clazz;

    public User() {
    }

    public User(String username, String password, int age, boolean isStudent) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
    }

    public User(String username, String password, int age, boolean isStudent, Job job, int test1, int test2, int clazz) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.isStudent = isStudent;
        this.job = job;
        this.test1 = test1;
        this.test2 = test2;
        this.clazz = clazz;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }

    public Job getJob() {
        return job;
    }

    public void setJob(Job job) {
        this.job = job;
    }

    public int getTest1() {
        return test1;
    }

    public void setTest1(int test1) {
        this.test1 = test1;
    }

    public int getTest2() {
        return test2;
    }

    public void setTest2(int test2) {
        this.test2 = test2;
    }

    public int getClazz() {
        return clazz;
    }

    public void setClazz(int clazz) {
        this.clazz = clazz;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                ", job=" + job +
                ", test1=" + test1 +
                ", test2=" + test2 +
                ", clazz=" + clazz +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                isStudent == user.isStudent &&
                test1 == user.test1 &&
                test2 == user.test2 &&
                clazz == user.clazz &&
                Objects.equals(username, user.username) &&
                Objects.equals(password, user.password) &&
                Objects.equals(job, user.job);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password, age, isStudent, job, test1, test2, clazz);
    }
}

1.6.2 测试类以及测试效果1

package _4控制序列化和反序列化的变量名称.test;

import _4控制序列化和反序列化的变量名称.User;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class TestVariableNameOfControllSerializeAndDeserialize {
    public static void main(String[] args) {
        User user1 = new User("zhangsan","123",18,false);
        user1.setTest1(1);
        user1.setTest2(2);
        user1.setClazz(3);

        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();//让@Expose注解生效

        String user1Json = gson.toJson(user1);//序列化
        System.out.println("序列化:"+user1Json);

        User user2 = gson.fromJson(user1Json, User.class);
        System.out.println("反序列化:"+user2);



    }
}

测试效果
在这里插入图片描述

1.6.3 测试类以及测试效果2

package _4控制序列化和反序列化的变量名称.test;

import _4控制序列化和反序列化的变量名称.Job;
import _4控制序列化和反序列化的变量名称.User;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.math.BigDecimal;

public class TestVariableNameOfControllSerializeAndDeserialize02 {
    public static void main(String[] args) {
        User user1 = new User("zhangsan","123",18,false);
        user1.setTest1(1);
        user1.setTest2(2);
        user1.setClazz(3);
        Job job = new Job("Java开发",new BigDecimal(10000.00));
        user1.setJob(job);

        Gson gson  =new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();//让@Expose注解生效

        String user1Json = gson.toJson(user1);//序列化
        System.out.println("序列化:"+user1Json);

        User user2 = gson.fromJson(user1Json, User.class);//反序列化
        System.out.println("反序列化:"+user2);
    }
}

测试效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能遥测终端机 水文RTU 5G水资源监测 雨水情测报应用

M21F-V50系列智能遥测终端机是辰迈智慧自主研发的融合北斗三代短报文、4/5G公网通信、LoRa、Bluetooth、Ethernet等多种通信方式、数据采集及防盗报警于一体的智能遥测终端。产品内置数据采集器&#xff0c;实现内部模数转换&#xff0c;提供增量式雨量接口、RS232、RS485、以太…

【07-JVM面试专题-JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态链接吧?】

JVM运行时数据区的虚拟机栈你知道吗&#xff1f;它的基本结构是什么呢&#xff1f;你知道栈帧的结构吗&#xff1f;那你说说动态链接吧&#xff1f; JVM运行时数据区的虚拟机栈你知道吗&#xff1f;它的基本结构是什么呢&#xff1f;你知道栈帧的结构吗&#xff1f;那你说说动态…

itk中的一些图像处理

文章目录1.BinomialBlurImageFilter计算每个维度上的最近邻居平均值2.高斯平滑3.图像的高阶导数 RecursiveGaussianImageFilter4.均值滤波5.中值滤波6.离散高斯平滑7.曲率驱动流去噪图像 CurvatureFlowImageFilter8.由参数alpha和beta控制的幂律自适应直方图均衡化9.Canny 边缘…

React hooks之useContext《类比Vue的Provide》(三)

系列文章目录 提示&#xff1a;我又来更新啦&#xff01;&#xff01;&#xff01;这次又把之前useEffect的补充了一次&#xff01;&#xff01;&#xff01;&#xff01; 文章目录系列文章目录前言1.Vue中的Provide和useContext&#xff08;相同点&#xff09;2..Vue中的Provi…

大数据Hadoop教程-学习笔记02【Apache Hadoop、HDFS】

视频教程&#xff1a;哔哩哔哩网站&#xff1a;黑马大数据Hadoop入门视频教程教程资源&#xff1a;https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【P018-P037】大数据Hadoop教程-学习笔记0…

0301微分中值定理-微分中值定理与导数的应用

文章目录1 罗尔定理2 拉格朗日定理3 柯西中值定理5后记1 罗尔定理 费马引理 设函数f(x)在点x0f(x)在点x_0f(x)在点x0​的某邻域U(x0)U(x_0)U(x0​)内有定义&#xff0c;并且在点x0x_0x0​处可导&#xff0c;如果对任意的x∈U(x0),x\in U(x_0),x∈U(x0​),有 f(x)≤f(x0)(或f(x)…

给你的Vim加上自动编程功能

Vim 是高度可定制、可扩展的编辑器。这对热爱折腾的程序员来说&#xff0c;绝对是一种乐趣&#xff0c;同时也是进一步提升开发效率的源泉。近期CodeGeeX举办的黑客松活动中&#xff0c;参赛选手Lance 提交了一款名叫Vim with CodeGeeX的作品&#xff0c;这款作品是基于CodeGee…

Java开源工具库使用之httpclient

文章目录前言一、简单使用1.1 get 请求1.2 post 简单表单请求1.3 表单上传文件1.4 上传 json 数据二、高级用法2.1 超时和重试2.2 Cookie2.3 拦截器2.4 fluent API三、3.1旧版本使用3.1 Get 请求3.2 Post 请求四、异步版本使用4.1 基本请求4.2 请求流水线执行参考前言 HttpCli…

SSM SpringBoot vue 健康医疗预约系统

SSM SpringBoot vue 健康医疗预约系统 SSM 健康医疗预约系统 功能介绍 首页 图片轮播展示 出诊信息推荐 医院公告 科室信息 科室详情 出诊信息 医生详情 挂号预约 登录注册 留言反馈 个人中心 我的收藏 后台管理 登录 注册医生 个人中心 用户管理 科室信息管理 医生管理 出诊…

二、Java虚拟机的基本结构

Java虚拟机的架构1.内存结果概述2.类加载器子系统的作用3. 类加载器ClassLoader角色4.类的加载过程5.类加载器的分类1.引导类加载器(虚拟机自带的加载器)Bootstrap ClassLoader2.扩展类加载器(虚拟机自带的加载器) Extenssion ClassLoader3.应用程序类加载器(虚拟机自带的加载器…

CAN TP层函数介绍

如果想使用CAN TP层函数,首先需要在网络节点或测试节点配置页面的Componets组件一栏添加osek_tp.dll文件。路径为:C:\Program Files\Vector CANoe 15\Exec32 至于节点的CAPL程序内需不需要引用这个dll文件,无所谓,可写可不写。但是如果是其他dll,必须在CAPL程序中引用。为…

多服务器节点访问解决一人一单问题+redis设置锁方案

项目地址及项目具体介绍-码云仓库&#xff1a;https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis 测试1&#xff1a; 这里使用jmeter同时启动2各线程&#xff1a; 原来的数据库表的数据&#xff1a; goods的数据是&#xff1a; id …

金蝶云星空物料批量禁用反禁用程序

【需求描述】&#xff1a;需要通过批量禁用反禁用操作物料。 【操作方法】&#xff1a; 下载附件批量禁用程序。 首先双击安装&#xff0c;一直下一步。 双击打开 会提示需要配置账套信息 点击菜单栏配置 输入相关配置信息 填写完毕后 然后点击下载模板导入要下载的数据 选…

Linux进程学习【三】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…

Word控件Spire.Doc 【Table】教程(18):如何在 C# 中的 Word 中创建嵌套表格

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

「JVM 编译优化」即时编译器

前端编译器&#xff08;javac&#xff09;将 Java 代码转为字节码&#xff08;抽象语法树&#xff09;&#xff0c;优化手段主要用于提升程序的编码效率&#xff1b; 后端编译器&#xff08;内置于 JVM 的 JIT/AOT Compiler&#xff0c;C1&#xff0c;C2&#xff09;将字节码转…

2022年休闲游戏市场总结

在预测 2023 年之前&#xff0c;我们先回顾一下 2022 年。从上一年发生的事件中往往能看到未来趋势的影子&#xff0c;所以 2022 年的总结至关重要。一、2022年总结回顾1、流行游戏类型回顾 2022 年&#xff0c;三种超休闲游戏表现最为突出&#xff1a;跑酷游戏&#xff1a;跑酷…

spring之声明式事务开发

文章目录一、声明式事务之全注解式开发1、新建springConfig类2、测试程序3、测试结果二、声明式事务之XML实现方式1、配置步骤2、测试程序3、运行结果附一、声明式事务之全注解式开发 基于之前的银行转账系统&#xff0c;将spring.xml配置文件嘎掉&#xff0c;变成全注解式开发…

【极海APM32替代笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)

【极海APM32替代笔记】低功耗模式下的RTC唤醒&#xff08;非闹钟唤醒&#xff0c;而是采用RTC_WAKEUPTIMER&#xff09; 【STM32笔记】低功耗模式配置及避坑汇总 前文&#xff1a; blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置…

Spring Boot整合RabbitMQ教程

1.首页我们了解一下消息中间件的应用场景异步处理场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。…