Установить динамическую аннотацию SerializedName для класса данных Gson - PullRequest
0 голосов
/ 22 октября 2019

Ответ, который я возвращаю на мой вызов API через Retrofit, имеет динамическое значение для каждого объекта. Мне нужно иметь возможность редактировать значение в аннотации @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
)

Как я могу установить SerializedName для объекта MediaLink, который будет уникальнымзначение каждый раз, когда я загружаю?

1 Ответ

1 голос
/ 23 октября 2019

Вам необходимо проанализировать данные как карту, для этого может помочь приведенный ниже код.

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
)

, чтобы вы могли извлекать данные как карту, тогда ваши динамические данные будут ключевыми, и связанные данные будут работатьв качестве значения для этого ключа необходимо использовать итератор для получения данных из ключа и значения в соответствии со значением ключа.

...