更新:有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();
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)