为什么作者要在 Room 数据库的某个字段上添加 @field:SerializedName 注解?

Hel*_*oCW 6 android android-room

我正在通过https://github.com/googlecodelabs/android-paging上的示例代码学习 Room

代码A是定义@Entity一个表的a,大家可以看到

通常它将@ColumnInfo注释添加到字段中,例如 @ColumnInfo(name = "first_name") val firstName: String?, ....

为什么作者要给@field:SerializedNameRoom数据库的某个字段添加注解?

代码A

@Entity(tableName = "repos")
data class Repo(
    @PrimaryKey @field:SerializedName("id") val id: Long,
    @field:SerializedName("name") val name: String,
    @field:SerializedName("full_name") val fullName: String,
    @field:SerializedName("description") val description: String?,
    @field:SerializedName("html_url") val url: String,
    @field:SerializedName("stargazers_count") val stars: Int,
    @field:SerializedName("forks_count") val forks: Int,
    @field:SerializedName("language") val language: String?
)
Run Code Online (Sandbox Code Playgroud)

tyn*_*ynn 8

该注释是Gson@SerializedName的一部分,用于定义Json中这些属性的名称。

该注释是Room@ColumnInfo的一部分,用于定义SQLite中这些属性的列名称。

如果这两个注释均未定义,则属性/字段名称将用作Json属性或列的名称。

为什么作者要在 Room 数据库的某个字段上添加 @field:SerializedName 注解?

因为Room实体被复用为Gson DTO。