2011-01-18 4 views

ответ

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}