我有一个用例,其中在使用 GSON 库将 JSON 解析为 POJO 时,我需要根据某些条件更改枚举的值。 条件就像
enum Status{
A,B,C,D,DEFAULT
}
来自服务器的 JSON 类似于 "status":"A"或 "B" 等。 假设服务器端添加了一个新的状态,如"status":"G"。 如果出现上述响应,我想将状态设置为 DEFAULT 枚举类型。 解决这个问题的最佳方法是什么?
最佳答案
我有两个选择。
将
状态
设为字符串
像这样使用
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()
关于java - 使用 Gson 解析时设置默认 Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099609/