【问题标题】:Set Dynamic SerializedName annotation for Gson data class为 Gson 数据类设置 Dynamic SerializedName 注解
【发布时间】:2019-10-22 19:41:14
【问题描述】:

我通过 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,每次上传时它都是唯一值?

【问题讨论】:

    标签: android gson retrofit2


    【解决方案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
    )
    

    所以您将能够以地图的形式获取数据,然后您的动态数据将成为键,相关数据将作为该键的值,然后您需要使用迭代器根据键的值从键和值中获取数据.

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 2021-12-26
      • 2016-04-17
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多