Map、Set集合与Gson注解
2023-12-13 13:48:28
一、Map的序列化与反序列化
1.Map集合类型对象在反序列化时与List一样,需要使用TypeToken完成反序列化。
2.Set在反序列化时需要使用TypeToken完成反序列化。
创建User类和job类
public class User {
@Expose
private String userName;
@Expose
private String password;
@Expose
private int age;
@Expose
private boolean isStudent;
@Expose
private com.example.simplenotebook.xuliehuahefanxuliehua.bean.Job job;
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
public int getAge() {
return age;
}
public boolean isStudent() {
return isStudent;
}
public void setJob(Job job) {
this.job = job;
}
public Job getJob() {
return job;
}
public User(String userName, String password, int age, boolean isStudent) {
this.userName = userName;
this.password = password;
this.age = age;
this.isStudent = isStudent;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", password='" + password + '\'' +
", age=" + age +
", isStudent=" + isStudent +
", job=" + job +
'}';
}
}
public class Job {
private String name;
private int salary;
public Job(String name, int salary) {
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "job{" +
"name='" + name + '\'' +
", salary=" + salary +
'}';
}
}
测试代码
public class MapUnitTest {
@Test
public void testSet(){
Set<User> set1 = new HashSet<>();//创建set集合
set1.add(new User("Anglin1","123",18,false));
set1.add(new User("Anglin2","123",88,true));
set1.add(null);
//创建Gson提供的gson'对象
Gson gson = new Gson();
//序列化
String json = gson.toJson(set1);
System.out.println("序列化"+json);
//反序列化
Type type = new TypeToken<Set<User>>() {
}.getType();
Set<User> set2 = gson.fromJson(json,type);
//set没有get方法,需要用到迭代器
Iterator<User> iterator = set2.iterator();
while (iterator.hasNext()){
User next = iterator.next();
System.out.println("反序列化"+next);
}
}
}
运行结果
二、变量值为null的序列化与反序列化
1.当我们类型里面有一个属性为null的时候gson序列化的时候会忽略掉该属性。
2.如果是集合以及数组里面有属性为null的时候,gson则不会忽略。
三、控制序列化与反序列化的变量名称
如果希望JSON字符串字段名称不以变量名作为key,比如JSON字符串中的key在java里是关键字时,可以借助@SerializedName注解控制JSON字段中的Key命名。
文章来源:https://blog.csdn.net/Rssqzqyp/article/details/134965320
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!