gson 父类 多子类集合
时间: 2024-10-07 07:02:30 浏览: 22
Gson是一个流行的Java库,用于将Java对象序列化为JSON以及反序列化从JSON到Java对象。在处理多子类集合时,Gson可以利用Java泛型和JsonAdapter机制。
首先,假设你有一个父类`BaseEntity`,然后有多个子类`A`, `B`, 和 `C` 都继承自 `BaseEntity`:
```java
abstract class BaseEntity {
// 公共字段和方法...
}
class A extends BaseEntity {
// A 类特有的字段和方法...
}
class B extends BaseEntity {
// B 类特有的字段和方法...
}
class C extends BaseEntity {
// C 类特有的字段和方法...
}
```
你可以创建一个`List<BaseEntity>` 或 `ArrayList<BaseEntity>` 来存储所有类型的子类实例。为了通过Gson将这个集合序列化成JSON,每个子类需要一个对应的`JsonAdapter`。例如,对于`A`、`B`和`C`,你可能会这样做:
```java
// JsonAdapters for each subclass
Gson gson = new GsonBuilder().registerTypeAdapterFactory(new TypeAdapterFactory() {
@Override
public <T> JsonAdapter<T> create(Gson gson,.reflect.TypeToken<T> type) {
if (type.getRawType() == A.class) {
return new AJsonAdapter();
} else if (type.getRawType() == B.class) {
return new BJsonAdapter();
} else if (type.getRawType() == C.class) {
return new CJsonAdapter();
}
throw new IllegalArgumentException("Unknown type");
}
}).create();
String json = gson.toJson(listOfBaseEntities);
```
在这里,`AJsonAdapter`、`BJsonAdapter`和`CJsonAdapter`会负责转换各自的子类对象为JSON字符串。当你需要从JSON反序列化时,也可以使用类似的方式解析回来。
阅读全文