我有一个类,它用这个函数反序列化泛型的ArrayList,就像这个线程的第一个答案中描述的:Java抽象类函数泛型类型
public <T> ArrayList<T> arrayType(String data){
return g.fromJson(data, TypeToken.get(new ArrayList<T>().getClass()));
}
Eclipse要求我强制转换TypeToken,结果如下(sinde fromJson的函数需要一个类型,而不是一个TypeToken)
public <T> ArrayList<T> arrayType(String data){
return g.fromJson(data, (Type) TypeToken.get(new ArrayList<T>().getClass()));
}
结果我得到了这个错误:
java.lang.ClassCastException: com.google.gson.reflect.TypeToken cannot be cast to java.lang.reflect.Type
在gson用户手册中,他们告诉您这是调用函数的正确方式
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
Collection<Integer> ints2 = gson.fromJson(json, collectionType);
我看不出我做错了什么(如果它是一个有效的答案,为什么我会得到这个cast错误?)
您正在调用TypeToken.get
,它返回一个TypeToken
-而不是Type
。在您展示的示例中,它使用了TypeToken.getType()
,它返回一个类型
。
因此可以使用:
return g.fromJson(data, TypeToken.get(new ArrayList<T>().getClass()).getType());
...这将返回一个类型
,但它可能不是您真正想要的。特别是,由于类型擦除,无论您从调用站点指定什么t
,它都将返回相同的类型。如果您希望类型真正反映arraylist
,您需要将类传递到方法中,尽管我不完全确定从那里去哪里。(根据我的经验,Java反射API在泛型方面并不十分清晰。)
另外,我希望一个名为arraytype
的方法与数组有关,而不是arraylist
。
由于Realm无法处理升级类型,包括s,所以我正试图实现一个,就像这个问题一样。 问题是,我对为什么会出现以下错误感到困惑: W/系统。呃:com。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN_对象,但为字符串 这是Json的一部分: 我的RealmString: 改装Pojo的一部分: 以及反序列化程序: 我在
在我的spark代码中有gson,它存储在字符串RDD中,我将其转换为键和值。 (1). (2). 但我收到了以下错误消息。谷歌。格森。JsonSyntaxException:java。伊奥。EOFEException:com第1行第2列的输入结束。谷歌。格森。格森。com上的fromJson(Gson.java:813)。谷歌。格森。格森。com上的fromJson(Gson.java:768)
我正在使用gson进行改造,将json反序列化为领域对象。这在大多数情况下都很有效。处理问题时会出现麻烦 RealmList(字符串(或任何其他基本数据类型)) 由于Realm不支持RealmList,其中E不扩展Realm对象,所以我将字符串包装在RealmObject中。 我的领域对象如下 SimpleRealmObj工作正常,因为它只有字符串元素 如何反序列化stringStuff?我试过使
问题内容: 我需要转换从REST API获得的JSON数据,并将其转换为CSV以便进行分析。问题在于JSON数据不一定遵循相同的内容,因此我无法定义映射类型。这已经成为一项挑战,占用了我太多时间。我已经创建了一些代码,但是由于它在此行上引发了异常,因此它当然不起作用 错误是: 附加信息:无法将当前JSON对象(例如{“ name”:“ value”})反序列化为类型’System.Collecti
问题内容: 我有一个具有以下结构的JSON有效负载… …映射到以下类: 目前,如果用户提交的浮点值,则将忽略小数,并且仅接受整数部分。我想要做的是防止用户提交带有浮动值的有效负载(请参见下文)并引发异常(类似于“第8列第5行的“年龄”字段的JSON值无效”),这是标准做法反序列化失败时出现错误消息)。 我正在考虑为数字值实现自定义反序列化器,但想知道是否有更简单的方法来实现此目的。 问题答案: 在
问题内容: 使用Gson的方法时,可以使用某种给定类的set 方法吗? 我想这样做是因为对于目标类的每个全局变量都会进行修剪。 为此有任何GSON API注释吗? 我知道GSON提供了编写自定义序列化器/反序列化器的功能,但我想知道是否还有另一种方法可以实现此目的。 问题答案: 我实施了并在上注册了。因此,对于收到的所有String字段,Gson将使用my 反序列化该值。 下面是我的代码: …以及