gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:48:16 26 4
gpt4 key购买 nike

我有一个无法使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com