在Android Java中使用枚举从服务响应反序列化对象
我在在Android Java中使用枚举从服务响应反序列化对象,java,android,enums,deserialization,Java,Android,Enums,Deserialization,我在Enums.java类中获得了一个enum方法,如下所示: public enum Country { @SerializedName("Germany") Germany, @SerializedName("Australia") Australia, @SerializedName("Canada") Canada; @Override public String toString() { retu
Enums.java
类中获得了一个enum方法,如下所示:
public enum Country
{
@SerializedName("Germany")
Germany,
@SerializedName("Australia")
Australia,
@SerializedName("Canada")
Canada;
@Override
public String toString()
{
return super.toString();
}
}
@SerializedName("CountryName")
private Enums.Country countryName;
...
get
set
然后,我得到了一个对象,它的属性之一是Enums.Country
,如下所示:
public enum Country
{
@SerializedName("Germany")
Germany,
@SerializedName("Australia")
Australia,
@SerializedName("Canada")
Canada;
@Override
public String toString()
{
return super.toString();
}
}
@SerializedName("CountryName")
private Enums.Country countryName;
...
get
set
基本上,国家名称来自服务呼叫。然而,目前该对象仅涉及3个国家,即德国、澳大利亚和加拿大。如果它是其他内容,则它将为空。我怎样才能避免呢
谢谢。这相对容易,只需在类中定义一个未知的值,如下所示:
public enum Country
{
Unknown(Unknown"),
@SerializedName("Germany")
Germany,
@SerializedName("Australia")
Australia,
@SerializedName("Canada")
Canada;
}
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;
}
}
};
然后为该Enum
类型编写一个自定义反序列化程序,并使用它解析该Enum
。例如,使用GSON的反序列化程序代码如下所示:
public enum Country
{
Unknown(Unknown"),
@SerializedName("Germany")
Germany,
@SerializedName("Australia")
Australia,
@SerializedName("Canada")
Canada;
}
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;
}
}
};
JsonDeserializer反序列化程序=新的JsonDeserializer(){
@凌驾
公共国家/地区反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)引发JsonParseException{
试一试{
返回Country.valueOf(json.getAsString());
}捕获(例外e){
返回国。未知;
}
}
};
您的toString()
完全没有意义。您的国家/地区
枚举与枚举有何关系。总体验证状态类型
?从您向我们展示的内容来看,这两段代码互不相关。对不起,请检查我编辑的代码。它应该是Enums.country在这种特定情况下,正确的解决方案不是首先将国家名称硬连接到应用程序中。使用数据库表。明天一场革命,可能会有两个新国家和一个前国家。这不是硬编码的东西。如果你觉得有必要,把它们都放进去。现在,还有一些情况,你有固定的项目,比如身份证,你只允许驾驶执照,护照或出生证。但是有些地方也有国籍卡,这不在上面的列表中。所以我需要一个名为Unknown的字段在Country类中?