GSON将布尔值序列化为0或1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GSON将布尔值序列化为0或1相关的知识,希望对你有一定的参考价值。
所有,
我正在尝试执行以下操作:
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"}
有人可以给我一些选择吗?我不希望将我的布尔值重写为整数,因为这将导致现有代码存在若干问题(非显而易见,难以阅读,难以执行等)
答案
为了使其“正确”,您可以使用类似的东西
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;
}
}
然后使用它:
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 User Guide - Custom Serialization and Deserialization
以上是关于GSON将布尔值序列化为0或1的主要内容,如果未能解决你的问题,请参考以下文章
Gson 将 List<String> 反序列化为 realmList<RealmString>