[英]Deserialize List to unmodifiable collection with gson
我希望將所有List
序列化為不可修改的集合。
這是我要反序列化的班級:
public class MyClass
{
public final mylist = Collections.unmodifiablelist(new ArrayList());
}
我如何反序列化:
MyClass inst = (new Gson()).fromJson("{mylist:[\"firstString\"]}", MyClass.class);
我不想為使用List
所有100個類創建一個注冊類型適配器的寄存器,那么是否有一種方法可以全局覆蓋Gson
實例的List
的可反序列化?
您為什么不遵循JavaBean標准並僅返回不可修改的列表?
public class MyClass {
private List<String> myList = new ArrayList<String>();
public void setMyList(List<String> list) {
this.myList = list;
}
public Collection<String> getMyList() {
return Collections.unmodifiablelist(this.myList);
}
}
我也會選擇適配器工廠,但是代碼較短:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.