Android中如何将含嵌套对象的日历预订JSON转换为Parcelable类?
解决Android中嵌套JSON转Parcelable类的问题
首先得说,虽然你受Angular语法习惯影响觉得单独定义类没必要,但在Android的Parcelable体系里,用嵌套数据类配合@Parcelize是最清晰、易维护且符合规范的方案,而且实现起来一点都不麻烦。
具体实现步骤:
- 先为
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方法。
- 修改你的
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
相关产品推荐
相关产品推荐

