android - 为 Gson 数据类设置 Dynamic SerializedName 注解
问题描述
我通过 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,每次上传时它都是唯一值?
解决方案
您需要将数据解析为 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
)
因此您将能够以地图的形式获取数据,然后您的动态数据将成为键,相关数据将作为该键的值,然后您需要使用迭代器根据键的值从键和值中获取数据。
推荐阅读
- apache-kafka - 无法建立到节点 -1 (localhost/127.0.0.1:9092) 的连接。经纪人可能不可用。VPS 连接
- php - 购物车和用户身份验证级别无法正常工作,未定义索引 carID,但它通过 POST 请求传递
- visual-studio - 没有为项目设置OutputPath属性... / VS任意更改解决方案中的项目配置从Debug到Release
- python - 仅在 Tkinter 中的一帧上显示图像
- postgresql - 在 postgres 中删除表列约束是否安全
- pagespeed-insights - CLS 超过 1 可能吗?
- reactjs - 在 React 中是否可以通过组件传递一个 prop 并让它充当子组件的 prop 名称
- python - 调用在另一个文件中的另一个文件中定义的具有多个输出的函数
- html - 我可以使用相同的主机和域在 WIX 中插入我自己的 HTML、CSS、JS 网站构建吗?
- java - 为什么我的块实体变量没有被保存或加载?