gson的@Expose注解和@SerializedName注解
2016-07-10 10:08
375 查看
原文: http://blog.sina.com.cn/s/blog_77a428910101elci.html
1.使用@Expose可以区分实体中不想被序列化的属性
@Expose标签的2个属性.
反序列化 默认 true
1.2
序列化 默认 true
使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();创建Gson对象,没有@Expose注释的属性将不会被序列化
public class User {
@Expose
private String username;
@Expose(serialize=false)
private int age ;
private List list;
public User(String username, int age) {
super();
this.username = username;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public static void main(String []args){
User user = new User("lemon",27);
List list = new ArrayList();
list.add("l1");
list.add("l2");
user.setList(list);
Gson g1 = new Gson();
//使用 new Gson();
System.out.println(g1.toJson(user)); //{"username":"lemon","age":27,"list":["l1","l2"]}
//使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Gson g2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
System.out.println(g2.toJson(user)); //{"username":"lemon"}
}
}
2.使用@SerializedName标签定义属性序列化后的名字
@Expose
@SerializedName("name")
private String username;
public static void main(String []args){
User user = new User("lemon",27);
List list = new ArrayList();
list.add("l1");
list.add("l2");
user.setList(list);
Gson g1 = new Gson();
//使用 new Gson();
//{"name":"lemon","age":27,"list":["l1","l2"]}
System.out.println(g1.toJson(user));
//使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Gson g2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
//{"name":"lemon"}
System.out.println(g2.toJson(user));
}
补充:简单方式:排除部分不序列化的属性(特别是循环引用的) 可以使用关键字:transient。
1.使用@Expose可以区分实体中不想被序列化的属性
@Expose标签的2个属性.
1.1 deserialize(boolean)
反序列化 默认 true
1.2
serialize(boolean)
序列化 默认 true
使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();创建Gson对象,没有@Expose注释的属性将不会被序列化
public class User {
@Expose
private String username;
@Expose(serialize=false)
private int age ;
private List list;
public User(String username, int age) {
super();
this.username = username;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public static void main(String []args){
User user = new User("lemon",27);
List list = new ArrayList();
list.add("l1");
list.add("l2");
user.setList(list);
Gson g1 = new Gson();
//使用 new Gson();
System.out.println(g1.toJson(user)); //{"username":"lemon","age":27,"list":["l1","l2"]}
//使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Gson g2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
System.out.println(g2.toJson(user)); //{"username":"lemon"}
}
}
2.使用@SerializedName标签定义属性序列化后的名字
@Expose
@SerializedName("name")
private String username;
public static void main(String []args){
User user = new User("lemon",27);
List list = new ArrayList();
list.add("l1");
list.add("l2");
user.setList(list);
Gson g1 = new Gson();
//使用 new Gson();
//{"name":"lemon","age":27,"list":["l1","l2"]}
System.out.println(g1.toJson(user));
//使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Gson g2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
//{"name":"lemon"}
System.out.println(g2.toJson(user));
}
补充:简单方式:排除部分不序列化的属性(特别是循环引用的) 可以使用关键字:transient。
相关文章推荐
- unbind方法在事件中的使用,解决同类或同名元素事件触发多次问题
- python中的items方法
- 怎样用jmp指令改变CS,IP
- 认识一点朝鲜战争(上网笔记)
- seajs
- 关于angularjs中多个ng-app该如何启用的问题
- Java 开发环境配置
- 叶酸片
- 导入文件数据到数据库
- 如何使用Retrofit写一个Android的REST客户端的小教程
- ScrollView 往上滑动,里面的一个View停在某个位置的思路
- linux启动mysql
- Java千百问_02基本使用(013)_linux系统如何管理环境变量
- hdu1520 第一道树形DP,激动哇咔咔!
- Matlab与C++混合编程(依赖OpenCV)
- 【Python学习笔记】Python数据类型和变量
- MySQL基础
- 使用POI导出excel文件
- 5、索引的操作 ----第2篇
- DNS攻击