1

首先,我正在使用带有 gson 和 autovalue-gson 扩展的改造

在这里检查:https ://github.com/rharter/auto-value-gson

在 API 中,我有一个不同的模型,其中 API 返回带有 id、描述等的 json 以及消息数组,但这些消息可能会根据我想要的社交媒体类型(facebook、twitter、instagram 等)而有所不同。所以我做了这样的模型:

@AutoValue
public abstract class SocialStream<T> {
  public abstract int id();
  ......
  ......

  public abstract List<T> messages();

  public static <T> TypeAdapter<SocialStream<T>> typeAdapter(Gson gson, TypeToken<? extends SocialStream<T>> typeToken) {
    return new AutoValue_SocialStream.GsonTypeAdapter(gson, typeToken);
  }
}

如您所见,我还将 typetoken 传递给 AutoValue typeAdapter,一切似乎都正常,我已经记录了整个 json,但是当我尝试将它用作我的模型时出现问题。

SocialStream<FacebookPost> post = getList().get(0);

方法 getList() 返回这些消息的数组,这是我遇到异常的行:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.example.model.FacebookPost
at 
4

1 回答 1

0

我和我有完全相同的问题。关键是创建一个定制的反序列化器,因为 Gson 不知道里面的真实类。试试这个 https://stackoverflow.com/a/34685986/2458190

于 2016-10-14T02:20:27.360 回答