【问题标题】:Gson deserialize CollectionsGson 反序列化集合
【发布时间】:2012-01-24 15:58:35
【问题描述】:

新版本的 gson 在 Collections 的反序列化方面有很多变化。在我们使用 TypeToken 从 Json 数组中检索 List 之前,TypeToken 不再存在于库中。有没有关于现在采取什么方法的例子??...一直在查看文档,但不清楚这一点。它建议实现 JsonDeserializer 接口,并使用 GsonBuilder ......但又不清楚。有没有人有我们如何使用 Gson 反序列化集合的示例? 非常感谢。

【问题讨论】:

  • 你指的是哪个gson版本?因为我认为所有最新版本的 Gson 仍然有TypeToken
  • 是的,对不起,你是对的......我的困惑是因为现在构造函数在 2.1 jar 中被声明为受保护,因此以下代码行:Type typeOfCollectionOfFoo = new TypeToken>(){}.getType() 不再有效。这是一个混乱。
  • 哦,好的。请在下面回答您的问题并将其标记为答案。它可能对某人有帮助!

标签: java json gson


【解决方案1】:

google Gson 2.1 版不再有 TypeToken 类的公共构造函数,我们应该使用它提供的静态方法之一:

IE:

List<MyClass> myList= new ArrayList<MyClass>();
Type listType = TypeToken.get(myList.getClass()).getType();
myList= (new Gson()).fromJson(jsonString, listType);

【讨论】:

  • 这是错误的......这种情况下的 listType 将是 java.util.LinkedHashMap,因此 JSON 将创建一个列表,其中每个元素都是该类的一个实例,当然它会生成 ClassCastExceptions迭代列表时。这样做的正确方法是什么?我看不出为什么 2.1 版本的 GSON 有一个默认的访问构造函数......
猜你喜欢
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多