android - Gson 自定义反序列化器就在现场

标签 android 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;
    }

}

人物类:-

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

    private String firstName;
    private String lastName;

    private Gender gender;

    ... getters and setters
}

关于android - Gson 自定义反序列化器就在现场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236412/

相关文章:

java - 想要存储 HashMap 吗?

java - 使用 Gson 在 Java 中反序列化任意 JSON 并尊重整数

java - 没有很多类的 GSON 解析

java - 具有通用类型和通用字段名称的 GSON 反序列化

android - 重复输入错误 - 带有 GSON 的 JSONPath

javascript - jQuery Mobile 点击事件触发 vclick

android - 有没有办法获得持续录制的持续时间

Android:阿尔卡特手机未出现在 Eclipse/ADB 中

android - 如何在android中为多个屏幕实现正确的用户界面

android - 我们可以从 APK 以 root 身份运行 .sh 文件吗