GSON Ложные заглавные буквы - PullRequest
0 голосов
/ 18 января 2011

Есть ли способ заставить GSON распознать "False" как логическое значение?

например,

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

1 Ответ

3 голосов
/ 04 марта 2011

Да, вы можете предоставить свой собственный десериализатор и делать все, что пожелаете:

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}

...