Kotlin 如何将JSON对象解析为枚举
我有一个JSON对象,类似于Kotlin 如何将JSON对象解析为枚举,kotlin,gson,Kotlin,Gson,我有一个JSON对象,类似于 { "tsp": "ABC" // can be only one of three things: "ABC", "DEF", "GHI" "userId" : "lkajsdlk-199191-lkjdflakj" } 而不是按照 data class User(@SerializedName("tsp") val tsp: String, @SerializedName("userId") val userId: String 我希望有一个枚举
{
"tsp": "ABC" // can be only one of three things: "ABC", "DEF", "GHI"
"userId" : "lkajsdlk-199191-lkjdflakj"
}
而不是按照
data class User(@SerializedName("tsp") val tsp: String, @SerializedName("userId") val userId: String
我希望有一个枚举来定义这三个值,这样我的数据类就可以
data class User(@SerializedName("tsp") val tsp: TspEnum, @SerializedName("userId") val userId: String
我试着写一个枚举
enum class TspEnum(provider: String) {
AY_BEE_CEE("ABC"),
DEE_EE_EFF("DEF"),
GEE_HAYTCH_I("GHI");
}
然而,这并没有奏效
我现在意识到调用TspEnum.provider
将返回枚举的值,但我不确定如何在将JSON序列化到kotlin数据类的同时使GSON协同工作
我在这里读到Kotlin和GSON存在一个问题:
然而,此人序列化头发颜色以映射到枚举的方式与我的tsp json对象的方式大不相同,让我摸不着头脑
任何关于我错在哪里的指点都会很好,干杯 您可以为
TspEnum
创建反序列化程序:
class TspDeserializer : JsonDeserializer<TspEnum> {
override fun deserialize(json: JsonElement, typeOfT: Type?, context: JsonDeserializationContext?): TspEnum {
val stringValue = json.asString
for (enum in TspEnum.values()) {
if (enum.provider == stringValue) {
return enum
}
}
throw IllegalArgumentException("Unknown tsp $stringValue!")
}
}
然后您可以解析您的用户:
val user = gson.fromJson(json, User::class.java)
println(user) // prints User(tsp=AY_BEE_CEE, userId=lkajsdlk-199191-lkjdflakj)
val user = gson.fromJson(json, User::class.java)
println(user) // prints User(tsp=AY_BEE_CEE, userId=lkajsdlk-199191-lkjdflakj)