使用Gson反序列化ImmutableList

使用Gson反序列化ImmutableList,第1张

使用Gson反序列化ImmutableList

更新:有https://github.com/acebaggins/gson-
serializers
,其中涵盖了许多番石榴集合:

  • ImmutableList
  • ImmutableSet
  • ImmutableSortedSet
  • ImmutableMap
  • ImmutableSortedMap

如何编写适用于所有ImmutableList的单个反序列化器?

这个想法很简单,将传递的

Type
表示形式
ImmutableList<T>
转换为
Type
表示形式
List<T>
,使用内置
Gson
功能创建一个
List
并将其转换为一个
ImmutableList

class MyJsonDeserializer implements JsonDeserializer<ImmutableList<?>> {    @Override    public ImmutableList<?> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {        final Type type2 = ParameterizedTypeImpl.make(List.class, ((ParameterizedType) type).getActualTypeArguments(), null);        final List<?> list = context.deserialize(json, type2);        return ImmutableList.copyOf(list);    }}

ParameterizedTypeImpl
我使用的Java库中有多个类,但是它们都不是供公共使用的。我用进行了测试
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl

如何为所有ImmutableList注册它?

这部分很简单,register的第一个参数是

java.lang.reflect.Type
将我误认为使用using
ParameterizedType
,而简单地使用use 即可
Class
完成工作:

final Gson gson = new GsonBuilder()    .registerTypeAdapter(ImmutableList.class, myJsonDeserializer)    .create();


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5428841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存