有没有办法让GSON将“False”识别为布尔值?
e.g。
gson.fromJson("False",Boolean.class)
答案 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}