0

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

例如

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

1 回答 1

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) 时才有效。当您将整个值对象类放入其中并且其中某处有一个布尔值时,它也可以工作:

公共类 X{ boolean foo; }将使用 JSON {foo: TrUe}

于 2011-03-04T15:47:43.610 回答