GSON将布尔值序列化为0或1

所有,

我正在尝试执行以下操作:

public class SomClass { public boolean x; public int y; public String z; } SomClass s = new SomClass(); sx = true; sy = 10; sz = "ZZZ"; Gson gson = new Gson(); String retVal = gson.toJson(s); return retVal; 

所以这个小片段会产生:

 {"x":true,"y":10,"z":"ZZZ"} 

但我需要它生产的是:

 {"x":0, "y":10,"z":"ZZZ"} 

有人可以给我一些选择吗? 我不希望将我的布尔值重写为整数,因为这将导致现有代码存在若干问题(非显而易见,难以阅读,难以执行等)

为了使其“正确”,你可以使用类似的东西

 import java.lang.reflect.Type; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; public class BooleanSerializer implements JsonSerializer, JsonDeserializer { @Override public JsonElement serialize(Boolean arg0, Type arg1, JsonSerializationContext arg2) { return new JsonPrimitive(Boolean.TRUE.equals(arg0)); } @Override public Boolean deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { return arg0.getAsInt() == 1; } } 

然后使用它:

 public class Main { public class Base { @Expose @SerializedName("class") protected String clazz = getClass().getSimpleName(); protected String control = "ctrl"; } public class Child extends Base { protected String text = "This is text"; protected Boolean boolTest = false; } /** * @param args */ public static void main(String[] args) { Main m = new Main(); GsonBuilder b = new GsonBuilder(); BooleanSerializer serializer = new BooleanSerializer(); b.registerTypeAdapter(Boolean.class, serializer); b.registerTypeAdapter(boolean.class, serializer); Gson gson = b.create(); Child c = m.new Child(); System.out.println(gson.toJson(c)); String testStr = "{\"text\":\"This is text\",\"boolTest\":1,\"class\":\"Child\",\"control\":\"ctrl\"}"; Child cc = gson.fromJson(testStr, Main.Child.class); System.out.println(gson.toJson(cc)); } } 

希望这有助于某人:-)

或者: Gson用户指南 – 自定义序列化和反序列化