Gson - 获取通用序列化名称

时间:2017-11-09 09:15:37

标签: java gson

public class MyClass{
    @SerializedName("hello")
    private String hello;

    @SerializedName("world")
    private String world

    @SerializedName("dynamic")
    private String dynamic;
}

我希望能够将所有动态*名称解析为变量dynamic。 例如:

  

{“你好”:“你好”,“世界”:“世界”,“dynamic123”:“qwerty”}

     

{“你好”:“你好”,“世界”:“世界”,“dynamic345”:“asdfgh”}

     

{“你好”:“你好”,“世界”:“世界”,“dynamic567”:“zxcvbn”}

我如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

为MyClass创建自定义Gson Deserilizer

public class MyClassDeSerializer implements JsonDeserializer<MyClass> {
    @Override
    public MyClass deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        MyClass myClass = new MyClass();

        for (Map.Entry<String, JsonElement> property : jsonElement.getAsJsonObject().entrySet()) {
            if (property.getKey().contains("dynamic")) {
                myClass.setDynamic(property.getValue().getAsString());
            }
            else if (property.equals("hello")) {
                myClass.setHello(property.getValue().getAsString());
            }
            else if (property.getKey().equals("world")) {
                myClass.setWorld(property.getValue().getAsString());
            }
        }
        return myClass;
    }
}

通过注册此类

创建Gson
Gson gson = new GsonBuilder().registerTypeAdapter(MyClass.class , new MyClassDeSerializer()).create();

Deserilize

MyClass result = gson.fromJson(json, MyClass.class);