浅谈@SerializedName

393 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

背景

做项目的时候,看到原项目里用了@SerializedName注解(为了解决我的项目照搬就飘红的问题,还花了点时间找到了对应的com.google.code.gson:gson版本,并且通过修改build.gradle文件导入了依赖)。

虽然我知道serialized是序列化的意思,但其实我之前没有仔细想过什么是序列化和反序列化,仅仅知道有这么个概念。再加上我看到注解后的名字和没注解前的一样,这让我更疑惑了。为什么要注解呢?为什么需要序列化呢?于是就开始了学习新知识之路。

image.png 图:某项目原代码片段

序列化与反序列化————Java与Json之间的相互转换

  • 序列化:Java对象——>JSON
  • 反序列化:JSON->Java对象

什么是JSON?

JSON:JavaScript Object Notation

它的格式长这样:

{
  "id": "123456",
  "introduce": "lalalalala",
  "sex": "1",
  "username": "hahahaa",
}

而对应的Java对象长这样(先假设两者对应名称相同,详细的后文再解释)

public class User{

private String id;
public String getId() {
    return id;
}

private String introduce;
public String getIntroduce() {
    return introduce;
}

private int sex;
public int getSex() {
    return sex;
}

private String username;
public String getUsername() {
    return username;
}
}

关于@SerializedName

@SerializedName有两个参数,其中第二个是可选,表示别名,

如,在下图所示的代码生成的JSON文件中,头像那一行可能会显示"haha",这就是别名的作用,对JSON有效。 image.png 实际上就是同一个Java字符串可以映射成不同的JSON字符串表示(一对多)

为什么要序列化?

我目前的理解是:因为我本次的任务主要是界面设计,但是最终需要调用接口和后端交互,接口返回的信息都是JSON格式的。