gpt4 book ai didi

java - 我应该如何将这个变量 E 传递给这个类?自定义序列化器 GSON

转载 作者:行者123 更新时间:2023-12-02 06:47:23 24 4
gpt4 key购买 nike

我正在关注this教程,以便在 Windows Azure Mobile Android 中实现自定义序列化程序。我正在尝试使用该代码,但是我收到 E 变量错误。

public class CollectionSerializer implements JsonSerializer<Collection>, JsonDeserializer<Collection>{

public JsonElement serialize(Collection collection, Type type,
JsonSerializationContext context) {
JsonArray result = new JsonArray();
for(E item : collection){
result.add(context.serialize(item));
}
return new JsonPrimitive(result.toString());
}


@SuppressWarnings("unchecked")
public Collection deserialize(JsonElement element, Type type,
JsonDeserializationContext context) throws JsonParseException {
JsonArray items = (JsonArray) new JsonParser().parse(element.getAsString());
ParameterizedType deserializationCollection = ((ParameterizedType) type);
Type collectionItemType = deserializationCollection.getActualTypeArguments()[0];
Collection list = null;

try {
list = (Collection)((Class<?>) deserializationCollection.getRawType()).newInstance();
for(JsonElement e : items){
list.add((E)context.deserialize(e, collectionItemType));
}
} catch (InstantiationException e) {
throw new JsonParseException(e);
} catch (IllegalAccessException e) {
throw new JsonParseException(e);
}

return list;
}
}

最佳答案

您可能想像这样声明您的类:

public class CollectionSerializer<E> implements JsonSerializer<Collection<E>>,
JsonDeserializer<Collection<E>> {

第一个方法可以变成:

public JsonElement serialize(Collection<E> collection, Type type,
JsonSerializationContext context) {
JsonArray result = new JsonArray();
for(E item : collection){
result.add(context.serialize(item));
}
return new JsonPrimitive(result.toString());
}

或者,您可以保留类声明不变并将方法更改为:

public <E> JsonElement serialize(Collection<E> collection, Type type,
JsonSerializationContext context) {
JsonArray result = new JsonArray();
for(E item : collection){
result.add(context.serialize(item));
}
return new JsonPrimitive(result.toString());
}

您需要哪一个取决于您的用例(给定的 CollectionSerializer 是否始终需要相同类型的集合)。

关于java - 我应该如何将这个变量 E 传递给这个类?自定义序列化器 GSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com