3

可能重复:
使用 gson 反序列化泛型

所以我需要做:

Type fluentType = new TypeToken<BruteForceFluentImpl<GtlDigestor.Data>>() {}.getType();

代替

Type fluentType = new TypeToken<Fluent<T>>() {}.getType(); // <-- i want to be able to do something like this.

String json = gson.toJson(fluent, fluentType);

这意味着每次我必须为 Fluent 类指定不同的类型参数时,我都需要更改我的代码以指定它。现在,类型参数是GtlDigestor.Data.

我该怎么做呢?(第二行代码不起作用)

4

1 回答 1

3

您需要在运行时告诉 Gson 实际的参数化类型(例如BruteForceFluentImpl<GtlDigestor.Data>,包括实际运行时原始类型和实际类型参数值),因为 Gson 需要保存这些信息。

UsingTypeToken是获取 的最简单方法Type,但要使用它,您必须在源代码中硬编码确切的类型(没有类型参数,如T)。如果您想将代码放在将与不同类型一起使用的方法中,那么也许此方法应该接受Type调用者需要传入的参数。然后可以在调用者的位置,每个位置大概只使用一个固定类型。

或者,如果您需要Type在运行时根据原始类型和类型参数完全动态地生成,请参阅我对问题的回答

于 2012-06-05T00:57:05.127 回答