Gson从Json到不同的Class

时间:2012-06-10 03:12:06

标签: android json gson pojo

我正在编写我的第一个Android应用程序,并且在将Json数据解析回POJO方面的经验非常有限。我正在使用GSON,它的数学来自于Json()。它在某种程度上有效,但并非所有课程都在制定。

我正在序列化的课程是

public class User  extends Model
{
   public String id;
   public String name;
   public List<User> friends = new ArrayList<User>();
   public List<Match> matches = new ArrayList<Match>();
}

是否可以将User解析为名为User的类。但用户列表为另一个具有不同名称且参数少得多的类

1 个答案:

答案 0 :(得分:0)

为List创建并注册类型适配器。创建它看起来像这样:

private final TypeAdapter<List<User>> listOfUsersTypeAdapter = new TypeAdapter<List<User>>() {
    @Override public void write(JsonWriter out, List<User> value) throws IOException {
        out.beginArray();
        for (User user : value) {
            out.value(user.id);
        }
        out.endArray();
    }
    @Override public List<User> read(JsonReader in) throws IOException {
        in.beginArray();
        List<User> result = new ArrayList<User>();
        while (in.hasNext()) {
            User user = new User();
            user.id = in.nextString();
        }
        in.endArray();
        return result;
    }
}.nullSafe();

在创建Gson对象时注册它:

    Gson gson = new GsonBuilder()
        .registerTypeAdapter(new TypeToken<List<User>>() {}.getType(), listOfUsersTypeAdapter)
        .create();

我没有测试过这个,但它应该可行。请注意,反序列化时,用户不会填写任何朋友或匹配字段。您可以在后处理步骤中从图表中重新构建。或使用GraphAdapterBuilder自动执行此操作。