我想编写一个通用函数,使用Gson反序列化通用类型List,下面是代码:
private <T> List<T> GetListFromFile(String filename)
{
//Read textfile
BufferedReader reader;
String data="";
try
{
reader = new BufferedReader(new FileReader(filename));
data = reader.readLine();
reader.close();
}
catch (FileNotFoundException ex)
{
}
catch (IOException ex)
{
}
if (data == null)
{
List<T> Spiel = new ArrayList<T>();
return Spiel;
}
else
{
//get list with Deserialise
Gson gson = new Gson();
List<T> something = gson.fromJson(data, new TypeToken<List<T>>(){}.getType());
return something;
}
}
但是这段代码不起作用,我得到一个奇怪的结构,但是没有我的类型列表
当我使用时:
List<concreteType> something = gson.fromJson(data, new TypeToken<List<T>>(){}.getType());
我工作,我得到了List<concreteType>
!
但是我需要一个通用函数,我该如何解决?
问候rubiktubik
没有将T
(as Class<T>
)的实际类型传递给您的方法,就无法做到这一点。
但是,如果显式传递它,则可以按如下所示创建TypeToken
for List<T>
:
private <T> List<T> GetListFromFile(String filename, Class<T> elementType) {
...
TypeToken<ArrayList<T>> token = new TypeToken<ArrayList<T>>() {};
List<T> something = gson.fromJson(data, token.getType());
...
}
也可以看看:
TypeToken
问题内容: 我在Android应用程序(带有Gson库)中实现Json反序列化存在一些问题 我已经上了这样的课 反序列化的调用是: 问题是调用后的result.posts列表包含一个LinkedTreeMap对象数组(具有正确的值,因此问题是反序列化)而不是MyJson对象。当我使用MyObject而不是T时,一切运行正常并且MyObject是正确的。 那么,有什么方法可以在不创建自定义反序列化器
问题内容: 我如何使用gson 2.2.4序列化和反序列化一个简单的枚举? 问题答案: 根据 GsonAPI文档 ,Gson提供了的默认序列化/反序列化,因此基本上,应使用标准和方法(与其他类型一样)对序列化和反序列化。
问题内容: 我想通过Google Gson传输列表对象,但是我不知道如何反序列化泛型类型。 看了这个之后我尝试了什么(BalusC的答案): 但是后来我在日食中遇到了一个错误,说“新的List(){}类型必须实现继承的抽象方法…”,如果我使用快速修复方法,则会得到20个以上的方法存根的怪兽。 我很确定有一个更简单的解决方案,但是我似乎找不到它! 编辑: 我现在有 但是,在“ fromJson”行中
问题内容: 我使用了很多不可变的集合,并且很好奇如何使用Gson反序列化它们。由于没有人回答,而且我自己找到了解决方案,因此我正在简化问题并提出自己的答案。 我有两个问题: 如何为所有人编写一个作品? 如何全部注册? 问题答案: 更新:有https://github.com/acebaggins/gson- serializers ,其中涵盖了许多番石榴集合: 如何编写适用于所有Immutable
问题内容: 我正在使用GSON 1.4,并使用两个通用对象序列化对象,如下所示 。当我对它进行反序列化时 可悲的是我得到了 java.lang.IllegalArgumentException:无法将java.util.ArrayList字段…设置为java.util.LinkedList 这是为什么 ?GSON文档指出,如果我使用object.class参数进行序列化,则它支持泛型。任何想法?谢
我试图使用Google的Gson库在Java中序列化和反序列化一个HashMap。我希望序列化这里所示的hashmap,将其保存到一个文件中,然后在以后的阶段从一个文件中读取并反序列化它。 HashMap如下所示 反序列化类的反序列化逻辑,以及我目前基于Web上找到的示例实现的对象类。IS: 下面是在test函数中调用的序列化和反序列化代码。测试函数序列化上面HashMap的一个对象,创建一个字符