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

新手替换Gson为Moshi:如何将UiGeneralCategory转为JSON字符串?

用Moshi处理含集合的模型类转JSON字符串

1. 替换模型中的ArrayList为Kotlin标准集合

Moshi对Kotlin原生集合的支持更友好,建议把模型里的ArrayList替换为MutableList(需要修改集合内容时)或List(仅只读场景):

原模型示例:

class UiGeneralCategory {
    var items: ArrayList<SomeItem> = ArrayList()
    // 其他字段...
}

替换后:

class UiGeneralCategory {
    // 可变集合,支持增删操作
    var items: MutableList<SomeItem> = mutableListOf()
    // 或只读集合(推荐用于不需要修改的场景)
    // val items: List<SomeItem> = emptyList()
}

如果一定要保留ArrayList,Moshi也能兼容,但Kotlin标准集合写法更简洁且符合语言习惯。

2. 生成适配器并序列化模型

你之前找到的适配器写法完全适用于带集合的模型,直接复用即可,完整示例代码:

// 初始化Moshi实例
val moshi = Moshi.Builder().build()
// 获取UiGeneralCategory的JSON适配器
val jsonAdapter: JsonAdapter<UiGeneralCategory> = moshi.adapter(UiGeneralCategory::class.java)

// 构建测试用的模型对象
val testCategory = UiGeneralCategory().apply {
    items.add(SomeItem("测试项1"))
    items.add(SomeItem("测试项2"))
    // 给其他字段赋值...
}

// 转换为JSON字符串
val jsonString = jsonAdapter.toJson(testCategory)
// 输出验证结果
println(jsonString)

3. 关键测试点

  • 集合内容验证:检查生成的JSON中items字段是否为数组格式,且包含所有添加的元素值
  • 空集合场景:将items设为emptyList()或mutableListOf(),确认JSON中对应字段输出为[]而非null
  • 反序列化校验(可选):验证JSON字符串能否正确转回模型对象,集合内容是否完整:
    val parsedCategory = jsonAdapter.fromJson(jsonString)
    println(parsedCategory?.items?.size) // 应输出2,与测试时添加的元素数量一致
    

4. 常见问题处理

如果集合元素是自定义类(比如示例中的SomeItem),需要给该类添加Moshi注解以生成适配器:

@JsonClass(generateAdapter = true)
class SomeItem(val name: String)

如果是Kotlin数据类,Moshi默认可以自动处理,但普通类必须添加上述注解。

内容的提问来源于stack exchange,提问作者Vlad.mir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:13:18