Android Gson使用详解,android开发入门pdf

此时为了兼顾多种格式的数据,就需要使用 SerializedName 注解 根据 SerializedName 的声明来看,SerializedName 包含两个属性值,一个是字符串,一个是字符串数组,而字符串数组含有默认值

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface SerializedName {
String value();

String[] alternate() default {};
}

SerializedName 的作用是为了在序列化或反序列化时,指导 Gson 如果将原有的属性名和其它特殊情况下的属性名联系起来

例如,修改 User 类,为 name 声明 SerializedName 注解,注解值为 userName

/**

  • 作者:chenZY
  • 时间:2018/3/17 18:32
  • 描述:https://github.com/leavesC
    */
    public class User {

@SerializedName(“userName”)
private String name;

private int age;

private boolean sex;

}

在序列时,Json 格式就会相应改变

public static void main(String[] args) {
//序列化
User user = new User(“leavesC”, 24, true);
Gson gson = new Gson();
System.out.println();
System.out.println(gson.toJson(user));
}

在反序列化时也一样,能够解析到正确的属性值

public static void main(String[] args) {
//反序列化
String userJson = “{“userName”:“leavesC”,“age”:24,“sex”:true}”;
Gson gson = new Gson();
User user = gson.fromJson(userJson, User.class);
System.out.println();
System.out.println(user);
}

还有个问题没解决,为了应对多种属性名不一致的情况,难道我们要声明多个 User 类吗?这显然是不现实的,所以还需要为 User 类设置多个备选属性名,这就需要用到 SerializedName 注解的另一个属性值 alternate 了。

/**

  • 作者:chenZY
  • 时间:2018/3/17 18:32
  • 描述:https://github.com/leavesC
    */
    public class User {

@SerializedName(value = “userName”, alternate = {“user_name”, “Name”})
private String name;

private int age;

private boolean sex;

}

以下几种情况都能够被正确的反序列化

public static void main(String[] args) {
//反序列化
Gson gson = new Gson();
String userJson = “{“userName”:“leavesC”,“age”:24,“sex”:true}”;
User user = gson.fromJson(userJson, User.class);
System.out.println();
System.out.println(user);

userJson = “{“user_name”:“leavesC”,“age”:24,“sex”:true}”;
user = gson.fromJson(userJson, User.class);
System.out.println();
System.out.println(user);

userJson = “{“Name”:“leavesC”,“age”:24,“sex”:true}”;
user = gson.fromJson(userJson, User.class);
System.out.println();
System.out.println(user);
}

三、字段过滤

有时候并不是所有的字段都需要进行系列化和反序列化,因此需要对某些字段进行排除,有四种方法可以来实现这种需求。

3.1、基于@Expose注解

Expose 注解包含两个属性值,且均声明了默认值。Expose 的含义即为“暴露”,即用于对外暴露字段,serialize 用于指定是否进行序列化,deserialize 用于指定是否进行反序列化。如果字段不声明 Expose 注解,则意味着不进行序列化和反序列化操作,相当于两个属性值均为 f

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值