本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。
背景
做项目的时候,看到原项目里用了@SerializedName注解(为了解决我的项目照搬就飘红的问题,还花了点时间找到了对应的com.google.code.gson:gson版本,并且通过修改build.gradle文件导入了依赖)。
虽然我知道serialized是序列化的意思,但其实我之前没有仔细想过什么是序列化和反序列化,仅仅知道有这么个概念。再加上我看到注解后的名字和没注解前的一样,这让我更疑惑了。为什么要注解呢?为什么需要序列化呢?于是就开始了学习新知识之路。
图:某项目原代码片段
序列化与反序列化————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有效。
实际上就是同一个Java字符串可以映射成不同的JSON字符串表示(一对多)
为什么要序列化?
我目前的理解是:因为我本次的任务主要是界面设计,但是最终需要调用接口和后端交互,接口返回的信息都是JSON格式的。