使用Retrofit解析EnumSet

时间:2015-12-24 00:51:48

标签: android gson retrofit

我正在使用Retrofit打一个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);

但我无法弄清楚如何将其纳入该格式。我尝试在枚举中添加一个布尔值来显示状态并添加一个自定义反序列化器但是从未被调用过,即使它只有我得到的值,而不是键,所以我不知道哪个门是为了。有没有任何巧妙的技巧?

1 个答案:

答案 0 :(得分:0)

我认为您可以在枚举中使用序列化名称,因为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;
    }

}