4
我用Gley使用Volley。 我有一个人对象,我想设置性别,而不是一个字符串,但是一个枚举。 所以我想为这个领域写一个自定义的反序列化器,让Gson去做其余的事情。 我该怎么做?Gson自定义解串器只是在场上
我用Gley使用Volley。 我有一个人对象,我想设置性别,而不是一个字符串,但是一个枚举。 所以我想为这个领域写一个自定义的反序列化器,让Gson去做其余的事情。 我该怎么做?Gson自定义解串器只是在场上
以下是具有示例调用的自定义反序列化(用于性别)的代码。
1)性别解串器不区分大小写
2)无效的值来处理(即输入JSON含有比男性和女性)
主要方法等: -
public static void main(String[] args) {
String jsonString = "{'firstName' : 'john','lastName' : 'stones','gender' : 'male'}";
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonModelDeserializer())
.create();
Person person = gson.fromJson(jsonString, Person.class);
System.out.println(person.toString());
}
性别枚举: -
public enum Gender {
MALE, FEMALE
}
解串器: -
如果输入JSON不具有男性或女性,所述valueOf
方法抛出:IllegalArgumentException - 已被处理为好。
性别反序列化也是不区分大小写的。
public class PersonModelDeserializer implements JsonDeserializer<Person> {
@Override
public Person deserialize(JsonElement paramJsonElement, Type paramType,
JsonDeserializationContext paramJsonDeserializationContext) throws JsonParseException {
Person person = new Gson().fromJson(paramJsonElement.getAsJsonObject(), Person.class);
try {
Gender gender = null;
if (paramJsonElement.getAsJsonObject().get("gender") != null) {
gender = Gender.valueOf(paramJsonElement.getAsJsonObject().get("gender").getAsString().toUpperCase());
}
person.setGender(gender);
} catch (IllegalArgumentException ie) {
System.out.println(ie.getMessage());
System.out.println("Gender cannot be serialized ..");
}
return person;
}
}
Person类: -
public class Person implements Serializable{
private static final long serialVersionUID = 5447375194275313051L;
private String firstName;
private String lastName;
private Gender gender;
... getters and setters
}