GSON Serialize boolean to 0 or 1

后端 未结 2 526
忘掉有多难
忘掉有多难 2021-02-05 07:46

All,

I\'m trying to do the following:

public class SomClass
{
    public boolean x;
    public int y;
    public String z;
}       

SomClass s = new Som         


        
2条回答
  •  死守一世寂寞
    2021-02-05 08:16

    To make it "correct" way, you can use something like that

    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;
        }
    }
    

    And then use it:

    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));
        }
    }
    

    Hope this helps someone :-)

提交回复
热议问题