You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何将含嵌套对象的日历预订JSON转换为Parcelable类?

解决Android中嵌套JSON转Parcelable类的问题

首先得说,虽然你受Angular语法习惯影响觉得单独定义类没必要,但在Android的Parcelable体系里,用嵌套数据类配合@Parcelize是最清晰、易维护且符合规范的方案,而且实现起来一点都不麻烦。

具体实现步骤:

  1. 先为start和end对应的嵌套JSON结构定义一个Parcelable数据类,比如叫TimeSlot:
@Parcelize
data class TimeSlot(
    val dateTime: String,
    val timeZone: String
): Parcelable

这个类会自动映射JSON里start/end包含的dateTime和timeZone字段,同时@Parcelize注解帮我们自动生成Parcelable所需的所有模板代码,不用手动写writeToParcel或者createFromParcel方法。

  1. 修改你的Booking类,把start和end的类型替换成刚才定义的TimeSlot:
@Parcelize
data class Booking(
    val id: String,
    val subject: String,
    val start: TimeSlot,
    val end: TimeSlot,
    val organiser: String
): Parcelable

为什么不推荐“跳过单独类”的方案?

你可能会想能不能用Pair<String, String>之类的替代单独类,但这种做法有两个明显的问题:

  • 可读性极差:别人看代码的时候根本不知道Pair的第一个元素是dateTime还是timeZone,维护成本很高;
  • 扩展性为0:如果以后你的JSON里start/end新增了字段(比如location),Pair完全没法适配,必须重构代码。

而单独定义TimeSlot类的话,不仅代码清晰,后续扩展也只需要在类里加新字段即可,非常灵活。

另外,不管你用Gson、Moshi还是Retrofit这类JSON解析库,它们都能自动识别嵌套的数据类结构,把JSON数据正确映射到你的Parcelable对象里,完全不需要额外配置。

内容的提问来源于stack exchange,提问作者Billy Cottrell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:17:45