我有这样的Java POJO类:
data class Topic(val id: Long, val name: String)
我有一个像这样的Kotlin数据类
json key
如何将kotlin data class
提供给@SerializedName
的任何变量,例如java变量中的{{1}}注释?
答案 0 :(得分:163)
数据类:
data class Topic(
@SerializedName("id") val id: Long,
@SerializedName("name") val name: String,
@SerializedName("image") val image: String,
@SerializedName("description") val description: String
)
到JSON:
val gson = Gson()
val json = gson.toJson(topic)
来自JSON的:
val json = getJson()
val topic = gson.fromJson(json, Topic::class.java)
答案 1 :(得分:11)
创建任何类数据并继承 JSONConvertable 接口
interface JSONConvertable {
fun toJSON(): String = Gson().toJson(this)
}
inline fun <reified T: JSONConvertable> String.toObject(): T = Gson().fromJson(this, T::class.java)
数据类
data class User(
@SerializedName("id") val id: Int,
@SerializedName("email") val email: String,
@SerializedName("authentication_token") val authenticationToken: String) : JSONConvertable
来自JSON
val json = "..."
val object = json.toObject<User>()
至JSON
val json = object.toJSON()
答案 2 :(得分:0)
您可以在Kotlin类中使用类似的
class InventoryMoveRequest {
@SerializedName("userEntryStartDate")
@Expose
var userEntryStartDate: String? = null
@SerializedName("userEntryEndDate")
@Expose
var userEntryEndDate: String? = null
@SerializedName("location")
@Expose
var location: Location? = null
@SerializedName("containers")
@Expose
var containers: Containers? = null
}
对于嵌套类,也可以使用类似嵌套对象的类。只需提供该类的序列化名称即可。
@Entity(tableName = "location")
class Location {
@SerializedName("rows")
var rows: List<Row>? = null
@SerializedName("totalRows")
var totalRows: Long? = null
}
因此,如果从服务器获得响应,则每个密钥都将与JOSN映射。