Gson custom field deserializer only on the field

I am using Volley with Gson. I have a person object, I would like to set the gender, not the string, but the enumeration. So I would like to write my own deserializer just for this field, and let Gson do the rest. How can i do this?

+4
source share
1 answer

Here is the code for custom deserialization (for gender) with a sample call.

1) Gender deserializer case insensitive

2) Invalid values ​​are processed (i.e. json input contains other than male and female)

The main method: -

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());

    }

Gender transfer: -

public enum Gender {
    MALE, FEMALE
}

deserializer: -

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;
    }

}

:

public class Person implements Serializable{
    private static final long serialVersionUID = 5447375194275313051L;

    private String firstName;
    private String lastName;

    private Gender gender;

    ... getters and setters
}
+4

Source: https://habr.com/ru/post/1658796/


All Articles