考虑这个通用类:
public class ListHolder<T> {
private List<T> objects;
[...] // non relevant fields
}
我正在使用Gson从REST api反序列化JSON响应。 API中的所有对象列表如下所示:
{"clients":[{"id":6493557,"name":"test", [..]}, {"id":6493557,
[..]}]}
{"users":[{"id":6493557,"name":"test", [..]}, {"id":6493557,
[..]}]}
问题在于虽然响应的结构相同,但启动列表的关键字具有域对象的名称。 Gson使用字段名称作为关键字,或使用可选的@SerializedName
注释,但我不知道如何在编译时获取T
的名称。
我知道由于类型擦除而无法在运行时获取它,但是注释需要编译时常量,并且编译器在编译时确实拥有此信息。
我想使用ListHolder<Client>
和ListHolder<User>
,如果可以的话,这会有效:
public class ListHolder<T> {
@SerializedName(nameof(T).toLowerCase() + "s")
private List<T> objects;
[...] // non relevant fields
}
nameof()
是否存在?有没有其他方法可以解决这个问题?
我可以通过TypeAdapter和自定义反序列化来解决这个问题,但我觉得它不会很好。