4
私はGsonとVolleyを使用します。 私は人物オブジェクトを持っています。私は性別を設定したい、文字列ではなく、列挙型を設定したいと思います。 私はこのフィールドだけのためのカスタムデシリアライザを書いて、Gsonに残りをさせたいと思います。 どうすればいいですか?フィールド上のGsonカスタムデシリアライザ
私はGsonと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
}