使用Enum从Android Java中的服务响应中反序列化的对象

时间:2018-05-01 03:36:39

标签: java android enums deserialization

我在Enums.java课程中得到了一个枚举方法,如下所示:

public enum Country
{
    @SerializedName("Germany")
    Germany,
    @SerializedName("Australia")
    Australia,
    @SerializedName("Canada")
    Canada;

    @Override
    public String toString()
    {
        return super.toString();
    }
}

然后,我得到了一个对象,其属性之一为Enums.Country,如下所示:

@SerializedName("CountryName")
private Enums.Country countryName;

...
get
set

基本上,国家/地区名称是从服务电话回来的。但是,目前该物体仅处理3个国家,即德国,澳大利亚和加拿大。如果是其他内容,则为null。我怎么能避免它?

感谢。

1 个答案:

答案 0 :(得分:1)

它相对容易,只需在您的类中定义未知值,如下所示:

public enum Country
{
    Unknown(Unknown"),
    @SerializedName("Germany")
    Germany,
    @SerializedName("Australia")
    Australia,
    @SerializedName("Canada")
    Canada;
}

然后为此Enum类型编写自定义反序列化程序,并使用它解析此Enum。例如,使用GSON的反序列化代码就像这样:

JsonDeserializer<Country> deserializer = new JsonDeserializer<Country>() {
    @Override
    public Country deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        try {
            return Country.valueOf(json.getAsString());
        } catch (Exception e){
            return Country.Unknown;
        }
    }
};