我知道如何实现JsonDeserializer和JsonSerializer,但这是我想要做的:
这是设置:
public class classA
{
public String a;
public classB clazzB;
}
public class classB
{
public String c;
public String d;
public String e;
public String f;
}
我想像这样序列化(并反序列化模拟)classA:
因为我知道如何做到这一点(对于e和f使用瞬态)这里有一个问题:
实质上,结果看起来应该是这样的:
{"a":"something","c":"something", "d":"something"}
我在JsonSerializer中遇到的问题是有2个变量(可能更多)我必须从classB序列化。如果只有一个那么我就可以返回变量的JSONPrimitive。我正在考虑在序列化方法中使用JsonTreeWriter,但我怀疑是否可以这样做。
最优雅的方法是什么?
答案 0 :(得分:1)
除了“你做错了”,因为你基本上说你不想将你的对象序列化为实际的JSON等价物......你没有序列化classB
,因为那不是你想要什么。您需要一个JSON对象,其中包含两个对象的字段。
您可以为A编写自定义反序列化程序和序列化程序,并创建您尝试创建的JSON。
class ClassA
{
public String a = "This is a";
public ClassB clazzB = new ClassB();
}
class ClassB
{
public String c = "This is c";
public String d = "This is d";
public String e;
public String f;
}
class ASerializer implements JsonSerializer<ClassA>
{
public JsonElement serialize(ClassA t, Type type, JsonSerializationContext jsc)
{
JsonObject jo = new JsonObject();
jo.addProperty("a", t.a);
jo.addProperty("c", t.clazzB.c);
jo.addProperty("d", t.clazzB.d);
return jo;
}
}
public class Test
{
pubic static void main(String[] args)
{
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(ClassA.class, new ASerializer());
String json = gson.create().toJson(new ClassA());
System.out.println(json);
}
}
输出:
{“a”:“这是”,“c”:“这是c”,“d”:“这是d”}
您还可以在该序列化程序中对ClassB
进行序列化,添加ClassA
中的元素并返回该元素。