gson嵌套自定义序列化器
问题描述:
我有一个嵌套的对象,我无法用gson序列化。我做了一个自定义的序列化器,它与父对象一起使用,但与我没有设法使其工作的子对象一起使用。gson嵌套自定义序列化器
所以在我的代码下面的自定义序列化器被用来序列化一个Team
。这样可行。在这个团队中,我有一个我想要序列化的User
列表。不幸的是,方法addProperty(String a, String b)
需要2个字符串(或一个原语),所以我不能添加属于User
类的属性成员。
下面是代码,第一I创建Gson
对象并注册Team
的自定义序列:
gson = new GsonBuilder().registerTypeAdapter(Team.class, new TeamSerializer())
.create();
gson.toJson(userData); // UserData instance.
这是会被与Gson
对象序列化的类(I省略用符号无关的字段// ...):
public class UserData{
public Team team;
//...
}
这是自定义序列化,我不能添加属性members
:
public class TeamSerializer implements JsonSerializer<Team>{
@Override
public JsonElement serialize(Team src, Type type, JsonSerializationContext context) {
JsonObject object = new JsonObject();
object.addProperty("id", src.getIdteams());
object.addProperty("name", src.getName());
object.addProperty("tag", src.getTag());
object.addProperty("picture", src.getProfilePic());
//object.addProperty("members", src.getMembers());
return object;
}
}
这是Team
类:
public class Team implements Serializable {
private long idteams;
private String name;
private String tag;
private String profilePic;
private List<User> members;
//...
}
答
描述的一般关系与TypeToken并使用上下文转换列表:
TypeToken<List<User>> typeDescription = new TypeToken<List<User>>() {};
JsonElement members = context.serialize(src.getMembers(), typeDescription);
object.addProperty("members", members);
如果用户是不是一个标准的豆您也可能需要TypeAdapter。
我刚刚试过这个,编译器说这是不可能在List和TypeToken上调用serialize()。它应该只是列表的列表和Type类型的类型,而不是TypeToken ...你有没有可能知道为什么? – mashaned