为 Gson 数据设置 Dynamic SerializedName 注释 class
Set Dynamic SerializedName annotation for Gson data class
我通过 Retrofit 从 API 调用返回的响应对每个对象都有一个动态值。我需要能够在每次调用时编辑@SerializedName 注释中的值。
这是 JSON 响应:
{
"data": {
"/storage/emulated/0/DCIM/Camera/IMG_20190920_110850.jpg": {
"id": "4f7e74d1-afa8-4924-a8ab-ea9360400b",
"location": "279dbcd7666b/4f7e74d1-afa8-4924-a8ab-ea9360400b.jpg",
"bucket": "challenge-submit"
}
}
}
这是我的数据class:
data class UploadLinksResponse(
@SerializedName("data")
val data: UploadData
)
data class UploadData(
@SerializedName("/storage/emulated/0/DCIM/Camera/IMG_20190920_110850.jpg")
val media: MediaLink
)
data class MediaLink(
@SerializedName("id")
val id: String,
@SerializedName("bucket")
val bucket: String,
@SerializedName("location")
val uploadLocation: String
)
如何设置 MediaLink 对象的 SerializedName,使其在每次上传时都是唯一值?
您需要将数据解析为 Map,下面的代码可以提供帮助。
data class UploadLinksResponse(
@SerializedName("data")
@Expose
val data: Map<String, MediaLink>
)
data class MediaLink(
@SerializedName("id")
val id: String,
@SerializedName("bucket")
val bucket: String,
@SerializedName("location")
val uploadLocation: String
)
因此您将能够以映射的形式获取数据,然后您的动态数据将成为键,相关数据将作为该键的值,然后您需要使用迭代器根据键和值获取数据键的值。
我通过 Retrofit 从 API 调用返回的响应对每个对象都有一个动态值。我需要能够在每次调用时编辑@SerializedName 注释中的值。 这是 JSON 响应:
{ "data": { "/storage/emulated/0/DCIM/Camera/IMG_20190920_110850.jpg": { "id": "4f7e74d1-afa8-4924-a8ab-ea9360400b", "location": "279dbcd7666b/4f7e74d1-afa8-4924-a8ab-ea9360400b.jpg", "bucket": "challenge-submit" } } }
这是我的数据class:
data class UploadLinksResponse(
@SerializedName("data")
val data: UploadData
)
data class UploadData(
@SerializedName("/storage/emulated/0/DCIM/Camera/IMG_20190920_110850.jpg")
val media: MediaLink
)
data class MediaLink(
@SerializedName("id")
val id: String,
@SerializedName("bucket")
val bucket: String,
@SerializedName("location")
val uploadLocation: String
)
如何设置 MediaLink 对象的 SerializedName,使其在每次上传时都是唯一值?
您需要将数据解析为 Map,下面的代码可以提供帮助。
data class UploadLinksResponse(
@SerializedName("data")
@Expose
val data: Map<String, MediaLink>
)
data class MediaLink(
@SerializedName("id")
val id: String,
@SerializedName("bucket")
val bucket: String,
@SerializedName("location")
val uploadLocation: String
)
因此您将能够以映射的形式获取数据,然后您的动态数据将成为键,相关数据将作为该键的值,然后您需要使用迭代器根据键和值获取数据键的值。