Gson之实例二-Gson注解和GsonBuilder
2015-10-26 00:00
239 查看
有时候我们不需要把实体的所有属性都导出,只想把一部分属性导出为Json.
有时候我们的实体类会随着版本的升级而修改.
有时候我们想对输出的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( 7fe0 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=柳波]
相关文章推荐
- iOS开发uibutton设置圆角形状
- 从头认识java-3.2 return break continue
- UUID的获取一句话
- request.getServletPath() 和 request.getPathInfo()
- Failed to read auto-increment value from storage
- 修改KVM虚机镜像中的文件的几种方法(Guestfish/Guestmount /virt-*tools)
- HDU 4675 GCD of Sequence (莫比乌斯反演)
- 使用UUID方法生成全球唯一标识
- lintcode 中等题:N Queens II N皇后问题 II
- IOS开发之UI介绍
- cf #327 Div.2 Problem A Wizards' Duel
- Request和ServletConfig
- 队列是一种特殊的线性表。LinkedList类实现了Queue接口,我们可以把LinkedList当成Queue来用。
- lintcode 中等题:N Queens N皇后问题
- ueditor 在线附件和在线图片路径错误BUG补丁
- UITabBarItem更改外观
- NavigationBar中设置UIBarButtonItem的标题,颜色不改变问题
- Codeforces Round #327 (Div. 2) A Wizards' Duel (水题)
- iOS 瀑布流效果(模仿UITableView重用机制)
- OpenCV GUI之搭建MFC+OpenCV开发环境