Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GSON将布尔值序列化为0或1_Java_Json_Parsing_Serialization_Gson - Fatal编程技术网

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

Java GSON将布尔值序列化为0或1,java,json,parsing,serialization,gson,Java,Json,Parsing,Serialization,Gson,全部, 我正在努力做到以下几点: public class SomClass { public boolean x; public int y; public String z; } SomClass s = new SomClass(); s.x = true; s.y = 10; s.z = "ZZZ"; Gson gson = new Gson(); String retVal = gson.toJson(s); return retVal; 因此

全部,

我正在努力做到以下几点:

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

SomClass s = new SomClass();
s.x = true;
s.y = 10;
s.z = "ZZZ";
Gson gson = new Gson();
String retVal = gson.toJson(s);
return retVal;
因此,这个小片段将产生:

{"x":true,"y":10,"z":"ZZZ"}
但我需要的是:

{"x":0, "y":10,"z":"ZZZ"}
有人能给我一些选择吗?我不希望将布尔值重写为int,因为这会导致现有代码出现一些问题(不明显、难以阅读、难以执行等)

或者这样:

要使其成为“正确”的方式,您可以使用类似的方法

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<Boolean>, JsonDeserializer<Boolean> {

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

希望这对某人有所帮助:-)

正如IntelliJ为我指出的,您可以将
反序列化
函数简化为简单的
返回arg0.getAsInt()==1
它对我来说只需稍加修改即可:
b.registerTypeAdapter(boolean.class,new BooleanSerializer())谢谢。这对我来说很有用…b.registerTypeAdapter(boolean.class,新的BooleanSerializer());与@gavin相同根据文档,您还应该注册boolean.class b.registerTypeAdapter(boolean.class,new BooleanSerializer());b、 registerTypeAdapter(boolean.class,新的BooleanSerializer());返回新的JsonPrimitive(arg0?1:0);如果arg0为null,则将崩溃。执行布尔值.TRUE.equals(arg0)。。。相反
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));
    }
}