【问题标题】:Parsing an EnumSet with Retrofit使用 Retrofit 解析 EnumSet
【发布时间】:2016-03-30 11:46:05
【问题描述】:

我正在使用 Retrofit 来访问一个 api,该 api 将为我提供汽车门的状态。这是回复的样子:

{
    "response": {
        "driver_front": 0,
        "driver_rear": 0,
        "passenger_front": 0,
        "passenger_rear": 0,
        "trunk": 0,
    }
}

理想情况下,我想将它解析成这样的 EnumSet:

public enum Doors
{
    DRIVER_FRONT,
    DRIVER_REAR,
    PASSENGER_FRONT,
    PASSENGER_REAR,
    TRUNK
}
private EnumSet<Doors> _openDoors = EnumSet.noneOf(Doors.class);

但我不知道如何把它变成那种格式。我尝试在枚举中添加一个布尔值以显示状态并添加一个自定义反序列化器,但它从未被调用,即使它会得到我也只会得到值,而不是密钥,所以我不知道它是用于哪个门.有人对此有什么巧妙的技巧吗?

【问题讨论】:

    标签: android gson retrofit


    【解决方案1】:

    我认为您可以在枚举中使用序列化名称,因为 GSON 为枚举提供了默认的序列化和反序列化 (Official documentation)

    public enum Doors {
    
        @SerializedName("0")
        DRIVER_FRONT (0), 
    
        @SerializedName("1")
        DRIVER_REAR (1),
    
        @SerializedName("2")
        PASSENGER_FRONT (2),
    
        @SerializedName("3")
        PASSENGER_FRONT (3),
    
        @SerializedName("4")
        TRUNK (4);
    
        private final int value;
    
        public int getValue() {
            return value;
        }
    
        private Doors(int value) {
            this.value = value;
        }
    
    }
    

    【讨论】:

    • 我在其他地方使用它,但那是来自 json 的值。
    • @CaseyB 等等,好像我误解了你的问题,我会试着想一个解决方案,稍后再更新我的答案。
    猜你喜欢
    • 2019-01-19
    • 2015-11-08
    • 2021-01-07
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多