gson-注解 清疚 2022-02-19 04:21 215阅读 0赞 [资源贴][Link 1] ### 文章目录 ### * * * 注解种类 * 1. @SerializedName 别名 * 2. @Expose 字段暴露 * 3. @JsonAdapter 类型适配器 * 4. @Since/@Util版本字段 ### 注解种类 ### gson2.8.5提供的注解有五个 * @SerializedName 别名 * @Expose 指定需要序列化和反序列化的字段 * @JsonAdapter 指示要与类或字段一起使用的Gson类型适配器的注释。 * @Since与@Util用于指定版本信息 ### 1. @SerializedName 别名 ### 属性: * value:序列化或反序列化时对象和json串key不同时可以通过该注解决; * alternate:反序列化时字段的替代名称 例子01: public class SomeObject { // 为someField指定别名custom_naming @SerializedName("custom_naming") private final String someField; private final String someOtherField; public SomeObject(String a, String b) { this.someField = a; this.someOtherField = b; } } SomeObject someObject = new SomeObject("first", "second"); Gson gson = new Gson(); String jsonRepresentation = gson.toJson(someObject); System.out.println(jsonRepresentation); // ==>{"custom_naming":"first","someOtherField":"second"} 反序列化也能将custtom\_naming转为someField 例子02: 假设现在json串someField的名字不是固定为custom\_naming,它是和custom\_naming2二选一哪个有值选哪个,怎么办呢。 // alternate是一个字符串数组,在反序列化和序列化时someField和custom_naming对应(value指定);在反序列化时,json中的key为custom_naming2和custom_naming3的值都会映射到someFileld @SerializedName(value = "custom_naming", alternate = { "custom_naming2", "custom_naming3"}) private final String someField; private final String someOtherField; Gson gson = new Gson(); String str = "{\"custom_naming3\":\"first\",\"someOtherField\":\"second\"}"; SomeObject someObject = gson.fromJson(str,SomeObject.class); System.out.println(someObject.getSomeField()); -------------------- ### 2. @Expose 字段暴露 ### 属性: * serialize 序列化默认为true 要序列化 * deserialize 反序列化默认为true 需要使用构造类排除没有使用此注解的字段 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 例子: @Expose private final String someField; private final String someOtherField; SomeObject someObject = new SomeObject("someField", "someOtherField"); Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); System.out.println(gson.toJson(someObject)); // ==>{"someField":"someField"} // 两个属性分别可以指定序列化和反序列化过程是否参与 -------------------- ### 3. @JsonAdapter 类型适配器 ### 属性: * value 指定适配器类 可以使用四种适配器:JsonDeserializer,JsonSerializer,InstanceCreator,TypeAdapter 例子01: java时间属性在序列化时指定默认格式 private Date date; //默认转为一下格式 // ==>{"date":"Apr 15, 2019 11:30:03 AM"} 例子02:格式化时间 想转为yyyy-MM-dd hh:mm:ss格式 public class SomeObject { @JsonAdapter(DateTimeSerializer.class) private Date date; public SomeObject(Date date) { this.date = date; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } // JsonSerializer序列化接口 // JsonDeserializer 反序列化接口 class DateTimeSerializer implements JsonSerializer<Date>, JsonDeserializer<Date> { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(simpleDateFormat.format(src).toString()); } @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { String str = json.getAsJsonPrimitive().getAsString(); try { return simpleDateFormat.parse(str); } catch (ParseException e) { e.printStackTrace(); return null; } } } public static void main(String[] args) throws Exception { SomeObject someObject = new SomeObject(new Date()); Gson gson = new Gson(); System.out.println(gson.toJson(someObject)); //==>{"date":"2019-04-15 11:31:39"} } -------------------- ### 4. @Since/@Util版本字段 ### 属性: * value:版本号 @Since 从版本号开始启用字段 @Util 从版本号开始废弃字段 需要使用构造器类指定版本号 new GsonBuilder().setVersion(1.0).create(); 例子: public class SomeObject { // since 从……启用 // 1.0版本启用 @Since(1.0) private String field1; // 2.0版本启用 @Since(2.0) private String field2; // util 直到……废弃 // 1.0版本开始废弃 @Until(1.0) private String field3; // 2.0版本开始废弃 @Until(2.0) private String field4; } public static void main(String[] args) throws Exception { SomeObject someObject = new SomeObject(); someObject.setField1("field1"); someObject.setField2("field2"); someObject.setField3("field3"); someObject.setField4("field4"); // 序列化1.9版本以前起用的字段和1.9以后废弃的字段 Gson gson = new GsonBuilder().setVersion(1.9).create(); System.out.println(gson.toJson(someObject)); } // ==>{"field1":"field1","field4":"field4"} [Link 1]: https://www.javadoc.io/doc/com.google.code.gson/gson/2.8.5
相关 Gson简介 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。 1、 比如json字符串为:\[\{“name”:”name0”,”age”:0 悠悠/ 2024年03月31日 12:54/ 0 赞/ 64 阅读
相关 GSON学习 路径如下 [点击打开链接][Link 1] [Link 1]: http://blog.csdn.net/lk_blog/article/category/11722 川长思鸟来/ 2022年06月17日 07:19/ 0 赞/ 317 阅读
相关 使用GSON 运行截图 ![Logcat][] ![Genymotion][] App.java package csdn.example.com.notificatio 淡淡的烟草味﹌/ 2022年06月12日 14:36/ 0 赞/ 209 阅读
相关 GSON入门 GSON是Google开发的Java API,用于转换Java对象和Json对象。最近在项目中看到了GSON的使用,简单的一行代码,就可以将JSON数据转换为我们需要 一时失言乱红尘/ 2022年06月05日 10:52/ 0 赞/ 195 阅读
相关 JSON、GSON 文章目录 什么是JSON 特点 JSON的数据结构 -- Object JSON的数据结构 -- Array 骑猪看日落/ 2022年04月13日 04:19/ 0 赞/ 262 阅读
相关 Gson 在项目中这样用到: Gson gson = new Gson(); OrderDTO orderDTO = new OrderDTO(); orderDTO.setBuy 偏执的太偏执、/ 2022年03月20日 12:20/ 0 赞/ 208 阅读
相关 Gson使用 (1)@SerializedName 的使用 场景:后台返回的字段 与 前端所需的字段不一致,如前端菜单控件接收的数据需要特定的字段名称 public class 朱雀/ 2022年03月18日 10:43/ 0 赞/ 256 阅读
相关 gson-GsonBuilder [资源贴][Link 1] 文章目录 1. 默认排除策略 2. 自定义排除策略 3. 序列化空字段 本是古典 何须时尚/ 2022年02月19日 04:27/ 0 赞/ 183 阅读
相关 Gson教程 <table> <tbody> <tr> <td><a href="http://www.codingdict.com/article/8696" title 灰太狼/ 2021年09月22日 15:28/ 0 赞/ 257 阅读
还没有评论,来说两句吧...