json - 使用 EnumJsonAdapter 解析枚举不起作用
问题描述
我有一个数据类 User :
@JsonClass(generateAdapter = true)
data class User(val accountName: String,
val gender: Gender,
val title: Title? = null)
)
其中 gender 和 title 必须只有一些值,这些值写在 enums 中:
enum class Gender(val value: Int) {
MALE(0), FEMALE(1), UNSPECIFIED(-1)
}
enum class Title(val value: String) {
MRS("Mrs"), MS("Ms")
}
我添加EnumJsonAdapter
到moshi builder,但它不起作用。
fun fromJson(json: String): User? {
val builder = Moshi.Builder()
.add(Title::class.java, EnumJsonAdapter.create<Title>(Title::class.java).withUnknownFallback(null))
.add(Gender::class.java, EnumJsonAdapter.create<Gender>(Gender::class.java).withUnknownFallback(Gender.UNSPECIFIED))
.build()
val jsonAdapter = builder.adapter(User::class.java)
return jsonAdapter.fromJson(json)
}
fun toJson(obj: User): String {
val builder = Moshi.Builder()
.add(Title::class.java, EnumJsonAdapter.create<Title>(Title::class.java).withUnknownFallback(null))
.add(Gender::class.java, EnumJsonAdapter.create<Gender>(Gender::class.java).withUnknownFallback(Gender.UNSPECIFIED))
.build()
val jsonAdapter = builder.adapter(User::class.java).serializeNulls()
return jsonAdapter.toJson(obj)
}
我收到 title = "Mr" 并将其解析为 null。关于性别,我得到了这个例外:
com.squareup.moshi.JsonDataException: Expected a string but was NUMBER at path $.data.gender
at com.squareup.moshi.adapters.EnumJsonAdapter.fromJson(EnumJsonAdapter.java:93)
这是我做错了EnumJsonAdapter
什么吗?所以我所看到的,它不能用于 int,但是为什么它不能用于作为 String 的 title 呢?
如果我为这些枚举使用自定义适配器,一切正常。
解决方案
推荐阅读
- r - 为什么我不能在 data.table 中使用`predict`?
- java - 如何将私有 jar 部署到 gitlab Maven 存储库
- python - 需要在没有网络的电脑上安装 pip
- python - 去除字符外的字符串部分
- text - 文字杂乱无章
- json - 如何使用 ON_ERROR=CONTINUE 在 Snowpipe 中有效地解析 json
- android - 如何让我的网站在 Google PlayStore 和 AppStore 中可用?
- web - 仅对一个网站禁用 Chrome iframe 安全性
- ruby - /gigs/:id/edit 处的 NoMethodError
- android - 在手机上的谷歌地图中规划路线,然后将其分享到另一个应用程序