我希望所有List
都反序列化为不可修改的集合。
这是我要反序列化的班级:
public class MyClass
{
public final mylist = Collections.unmodifiablelist(new ArrayList());
}
我如何反序列化:
MyClass inst = (new Gson()).fromJson("{mylist:[\"firstString\"]}", MyClass.class);
我不想为所有使用
List
的所有100个类创建一个注册类型适配器的寄存器,因此是否有办法全局覆盖该List
实例的Gson
可反序列化? 最佳答案
我也会选择适配器工厂,但是代码较短:
class MyAdapter implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> tokenType) {
final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, tokenType);
return new TypeAdapter<T>() {
@Override
public void write(JsonWriter out, T value) throws IOException {
delegate.write(out, value);
}
@Override
public T read(JsonReader arg0) throws IOException {
T t = delegate.read(arg0);
if (List.class.isAssignableFrom(tokenType.getRawType())) {
List<?> list = (List<?>) t;
return (T) Collections.unmodifiableList(list);
}
return t;
}
};
}
}
然后,像往常一样注册:
Gson g = new GsonBuilder().registerTypeAdapterFactory(new MyAdapter()).create();