GSON假大写

时间:2011-01-18 10:05:26

标签: boolean gson uppercase

有没有办法让GSON将“False”识别为布尔值?

e.g。

gson.fromJson("False",Boolean.class)

1 个答案:

答案 0 :(得分:3)

是的,您可以提供自己的反序列化程序并执行任何操作:

public class JsonBooleanDeserializer implements JsonDeserializer<Boolean>{
    @Override
    public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {        
        try {
            String value = json.getAsJsonPrimitive().getAsString();
            return value.toLowerCase().equals("true");
        } catch (ClassCastException e) {
            throw new JsonParseException("Cannot parse json date '" + json.toString() + "'", e);
        }
    }
}

然后将此反序列化器添加到您的GSON解析器:

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Boolean.class, new JsonBooleanDeserializer());
Gson gson = builder.create();
gson.fromJson(result, Boolean.class);

GSON需要知道这是一个布尔值,所以它只在你提供基类(Boolean.class)时才有用。 当你将整个值对象类放入其中并且其中有一个布尔值时,它也可以工作:

public class X {boolean foo; 将使用JSON {foo:TrUe}