【问题标题】:Serialization of ArrayList (generic types) with GSON使用 GSON 序列化 ArrayList(泛型)
【发布时间】:2016-04-19 16:38:06
【问题描述】:

我想使用 Google 的 GSON 库将 java 对象序列化为 JSON。它工作正常,除非发生 ArrayList。 GSON 无法处理 ArrayList 的泛型类型。 @Yavor Georgiev 描述了一个使用 registerSerializer(...) 方法的解决方案,但是这个方法在新版本中不存在。

gson.registerSerializer(ArrayList.class, new CollectionSerializer<Object>());

http://hashtagfail.com/post/44606137082/mobile-services-android-serialization-gson

在我的例子中,ArrayList 嵌套在对象下三层的类中,该类被传递给toJSON(...)

有谁知道如何解决这个问题?

结构是这样的:

public class Data() {
    @Expose
    privat int number = 8;
    @Expose
    private Foo foo = new Foo();
}

public class Foo() {
    @Expose
    private Bar bar = new Bar();
}

import java.awt.Point;
public class Bar() {
    @Expose
    ArrayList<Point> list = new ArrayList()<>;
}

【问题讨论】:

  • 在他的情况下他可以直接指定类型,因为他只想像toJSON(src, type)一样转换对象src。但在我的例子中,对象data 没有ArrayList 类型,而是Data
  • 阅读 GsonBuilder 上的 api。 registerTypeAdapter 方法似乎很有希望

标签: java json generics serialization gson


【解决方案1】:

您是否尝试过注册适配器。

new GsonBuilder().registerTypeAdapter(Object.class, new JsonSerializer<Object>() {
            @Override
            public JsonElement serialize(Object src, Type typeOfSrc, JsonSerializationContext context) {
                return context.serialize(src);
            }
        })

【讨论】:

  • 但我不确定这项工作是否适合您已经尝试过 egisterSerializer(ArrayList.class, new CollectionSerializer());我认为这样做是一样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多