使用 Gson 解析时设置默认枚举
Setting default Enum while parsing using Gson
我有一个用例,其中在使用 GSON 库将 JSON 解析为 POJO 时,我需要根据某些条件更改枚举的值。
条件就像
enum Status{
A,B,C,D,DEFAULT
}
来自服务器的 JSON 类似于 "status":"A" 或 "B" 等。
假设在服务器端添加了一个新状态,如 "status":"G"。
对于上述响应,我想将状态设置为 DEFAULT 枚举类型。
解决此问题的最佳方法是什么?
我有两个选择。
使Status
成为String
像这样使用 Gson
自定义反序列化器(Kotlin 示例)。
class StatusDeserializer : JsonDeserializer<Status> {
override fun deserialize(
json: JsonElement,
typeOfT: Type,
context: JsonDeserializationContext
): Status {
val jsonObject = json.asJsonObject
return when(jsonObject.get("status").asString) {
"A", "B", "C", "D" -> context.deserialize<Status>(jsonObject, Status::class.java)
else -> Status.DEFAULT
}
}
}
val gson = GsonBuilder().registerTypeAdapter(Status::class.java, StatusDeserializer()).create()
我有一个用例,其中在使用 GSON 库将 JSON 解析为 POJO 时,我需要根据某些条件更改枚举的值。 条件就像
enum Status{
A,B,C,D,DEFAULT
}
来自服务器的 JSON 类似于 "status":"A" 或 "B" 等。 假设在服务器端添加了一个新状态,如 "status":"G"。 对于上述响应,我想将状态设置为 DEFAULT 枚举类型。 解决此问题的最佳方法是什么?
我有两个选择。
使
Status
成为String
像这样使用
Gson
自定义反序列化器(Kotlin 示例)。class StatusDeserializer : JsonDeserializer<Status> { override fun deserialize( json: JsonElement, typeOfT: Type, context: JsonDeserializationContext ): Status { val jsonObject = json.asJsonObject return when(jsonObject.get("status").asString) { "A", "B", "C", "D" -> context.deserialize<Status>(jsonObject, Status::class.java) else -> Status.DEFAULT } } } val gson = GsonBuilder().registerTypeAdapter(Status::class.java, StatusDeserializer()).create()