为Gson数据类设置Dynamic SerializedName批注

时间:2019-10-22 19:41:14

标签: android gson retrofit2

我通过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"
    }
  }
}

这是我的数据类:

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,每次上传时该值都是唯一的?

1 个答案:

答案 0 :(得分:1)

您需要将数据解析为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
)

因此您将能够以映射的形式获取数据,然后您的动态数据将成为键,而相关数据将作为该键的值,那么您需要使用迭代器从键和值中获取数据(按键的值)

相关问题