Gson之实例二-Gson注解和GsonBuilder

有时候我们不需要把实体的所有属性都导出,只想把一部分属性导出为Json.

有时候我们的实体类会随着版本的升级而修改.

有时候我们想对输出的json默认排好格式.

... ...

请看下面的例子吧:

实体类:

import java.util.Date;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Student {
 private int id;
 @Expose
 private String name;
 @Expose
 @SerializedName("bir")
 private Date birthDay;
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public Date getBirthDay() {
 return birthDay;
 }
 public void setBirthDay(Date birthDay) {
 this.birthDay = birthDay;
 }
 @Override
 public String toString() {
 return "Student [birthDay=" + birthDay + ", id=" + id + ", name="
 + name + "]";
 }
}


测试类:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
public class GsonTest2 {
 public static void main(String[] args) {
 //注意这里的Gson的构建方式为GsonBuilder,区别于test1中的Gson gson = new Gson();
 Gson gson = new GsonBuilder()
 .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性
        .enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式
        .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//时间转化为特定格式  
        .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.
        .setPrettyPrinting() //对json结果格式化.
        .setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.
        //@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么
        //@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.
        .create();
 Student student1 = new Student();
 student1.setId(1);
 student1.setName("李坤");
 student1.setBirthDay(new Date());
 // //
 System.out.println("----------简单对象之间的转化-------------");
 // 简单的bean转为json
 String s1 = gson.toJson(student1);
 System.out.println("简单Bean转化为Json===" + s1);
 // json转为简单Bean
 Student student = gson.fromJson(s1, Student.class);
 System.out.println("Json转为简单Bean===" + student);
 // //
 Student student2 = new Student();
 student2.setId(2);
 student2.setName("曹贵生");
 student2.setBirthDay(new Date());
 Student student3 = new Student();
 student3.setId(3);
 student3.setName("柳波");
 student3.setBirthDay(new Date());
 List<Student> list = new ArrayList<Student>();
 list.add(student1);
 list.add(student2);
 list.add(student3);
 System.out.println("----------带泛型的List之间的转化-------------");
 // 带泛型的list转化为json
 String s2 = gson.toJson(list);
 System.out.println("带泛型的list转化为json==" + s2);
 // json转为带泛型的list
 List<Student> retList = gson.fromJson(s2,
 new TypeToken<List<Student>>() {
 }.getType());
 for (Student stu : retList) {
 System.out.println(stu);
 }
 }
}



输出结果:

----------简单对象之间的转化-------------简单Bean转化为Json==={  "Name": "李坤",  "bir": "2012-06-22 21:26:40:592"}Json转为简单Bean===Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=李坤]----------带泛型的List之间的转化-------------带泛型的list转化为json==[  {    "Name": "李坤",    "bir": "2012-06-22 21:26:40:592"  },  {    "Name": "曹贵生",    "bir": "2012-06-22 21:26:40:625"  },  {    "Name": "柳波",    "bir": "2012-06-22 21:26:40:625"  }]Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=李坤]Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=曹贵生]Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=柳波]


转载于:https://my.oschina.net/mbreath/blog/522357

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值