gson嵌套自定义序列化程序

时间:2016-03-08 13:43:53

标签: java json gson

我是一个无法用gson序列化的嵌套对象。我制作了一个自定义序列化程序,它与父对象一起使用,但是与我没有设置的子程序一起使用。

因此,在我的下面的代码中,自定义序列化程序用于序列化Team。这样可行。在这个团队中,我有一个我想要序列化的User列表。不幸的是,方法addProperty(String a, String b)要求2个字符串(或原语),所以我不能添加类User的属性成员。

以下是代码,首先我创建一个Gson对象并为Team注册自定义序列化程序:

gson = new GsonBuilder().registerTypeAdapter(Team.class, new TeamSerializer())
            .create();
 gson.toJson(userData); // UserData instance.

这是将使用Gson对象序列化的类(我省略了由//...)表示的无关字段:

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

1 个答案:

答案 0 :(得分:1)

描述与TypeToken的通用关系,并使用上下文转换列表:

TypeToken<List<User>> typeDescription = new TypeToken<List<User>>() {};
JsonElement members = context.serialize(src.getMembers(), typeDescription.getType());
object.add("members", members);

如果用户不是标准bean,您也可能需要 TypeAdapter