Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何将JSON对象解析为枚举_Kotlin_Gson - Fatal编程技术网

Kotlin 如何将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 我希望有一个枚举

我有一个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
我希望有一个枚举来定义这三个值,这样我的数据类就可以

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)