java - 使用 Gson 解析时设置默认 Enum

标签 java android gson retrofit

我有一个用例,其中在使用 GSON 库将 JSON 解析为 POJO 时,我需要根据某些条件更改枚举的值。 条件就像

enum Status{
 A,B,C,D,DEFAULT
}

来自服务器的 JSON 类似于 "status":"A"或 "B" 等。 假设服务器端添加了一个新的状态,如"status":"G"。 如果出现上述响应,我想将状态设置为 DEFAULT 枚举类型。 解决这个问题的最佳方法是什么?

最佳答案

我有两个选择。

  1. 状态设为字符串

  2. 像这样使用 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/

相关文章:

Java:引用意味着多少内存?

java - 在尝试一些 ProGuard 规则后,使用 ProGuard 会导致构建失败或强制关闭并显示空 UI

android - 在 back4app 中重复推送通知

java - 在android后台下载图像

java - 在java中查询一个JSONObject

java - 使用 GSON 解析带有子数组的 JSON 数组?

java - 使用 Gson 从 List 对象数据转换为 JSON 数据时日期时间格式发生变化

java - 对于桌面和企业开发,是否有 Sun JVM 的可靠替代品?

java - 针对不同的条件清理一些复杂的逻辑

android - @android的含义