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

如何序列化自定义类型的ArrayList?Kotlin中ArrayList<Location>序列化问题

解决方案

问题原因

你之前的注解写法不生效,是因为你把Location类型的序列化器直接指定给了ArrayList<Location>类型的wpts属性,序列化器和属性类型不匹配,所以框架依旧找不到Location类型的序列化器。

解决方法

你可以选择下面任意一种方案实现:

方案1:文件级全局绑定序列化器(最简便)

在定义包含wpts属性的类的Kotlin文件顶部,添加UseSerializers注解,全局指定该文件内所有Location类型都用你自定义的序列化器:

@file:UseSerializers(LocationSerializer::class)
// 后续正常写包名、导入语句、包含wpts的类定义即可

方案2:仅给wpts属性单独指定

如果你不想影响文件内其他Location类型的序列化,可以直接在属性的泛型参数上指定序列化器:

@Serializable // 外层类必须加这个注解
class 你的外层类名 {
    var wpts: ArrayList<@Serializable(with = LocationSerializer::class) Location> = arrayListOf()
}

方案3:注册全局序列化模块(适用全项目共用)

如果你的整个项目都需要用这个序列化器处理Location类型,可以在构造Json对象的时候注册序列化模块,不用在每个使用的地方加注解:

val json = Json {
    serializersModule = SerializersModule {
        contextual(Location::class, LocationSerializer)
    }
}
// 后续用这个自定义的json对象做序列化/反序列化即可

额外检查项

如果按照上面操作依旧报错,请确认以下配置:

  • 包含wpts属性的外层类,本身已经添加了@Serializable注解
  • 你引入的LocationSerializer路径正确,没有导包错误
  • 模块的build.gradle已经正确应用kotlinx-serialization插件,依赖版本匹配

Serializer has not been found for type 'Location'.


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:36:03