java - gson 嵌套自定义序列化器

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

最佳答案

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

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

如果 User 不是标准 bean,您可能还需要一个 TypeAdapter

关于java - gson 嵌套自定义序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35869064/

相关文章:

Java double 没有小数位不能正确相乘?

python - 使用 Python 比较 JSON 中的值

javascript - 即使最大宽度设置为 100%,为什么我的 (json) 图像仍超出边框/容器?

java - 为什么 GSON 将 "\n"和 "\\n"都解析为换行符?

java - 如何从 Java 中的泛型类型反序列化 JSON 对象?

java - "this"指的是哪一个?

java - Mockito returnsFirstArg() 不适用于通用的第一个参数

ruby-on-rails - 我应该使用 `respond_to` 还是在 Rails 中有一个专用的 API 命名空间?

java - 是否可以通过注释类的对象而不是注释字段来更改类的字段的 json 名称

java - 你如何命名一个只调用其他方法的类/方法?