.fromJson(mystring, Object.class);
,但得到的嵌套的ArrayList-S。
我想嵌套double[][]...[]
這可能嗎?
UPDATE
我寫了下面的自定義適配器
public class DoubleArrayAdapter extends TypeAdapter<Object> {
@Override
public void write(JsonWriter out, Object value) throws IOException {
if(value.getClass().isArray()) {
out.beginArray();
int length = Array.getLength(value);
for (int i = 0; i < length; i ++) {
Object arrayElement = Array.get(value, i);
write(out, arrayElement);
}
out.endArray();
}
else {
out.value((double) value);
}
}
@Override
public Object read(JsonReader in) throws IOException {
if(in.peek() == JsonToken.BEGIN_ARRAY) {
ArrayList<Object> elements = new ArrayList<>();
in.beginArray();
do {
elements.add(read(in));
} while(in.peek() != JsonToken.END_ARRAY);
in.endArray();
if(elements.size() == 0) {
return new double[0];
}
else {
Class cls = elements.get(0).getClass();
if(cls.isArray()) {
Object ans = Array.newInstance(cls, elements.size());
for(int i=0; i<elements.size(); ++i) {
Array.set(ans, i, elements.get(i));
}
return ans;
}
else {
double[] ans = new double[elements.size()];
for(int i=0; i<elements.size(); ++i) {
ans[i] = (double) elements.get(i);
}
return ans;
}
}
}
else {
return in.nextDouble();
}
}
}
,並準備GSON對象用下面的代碼
public static Gson getGsonWithDoubleArrayAdapter() {
if(gson == null) {
gson = new GsonBuilder()
.serializeNulls()
.setPrettyPrinting()
.registerTypeAdapter(Object.class, new DoubleArrayAdapter())
.create();
}
return gson;
}
但看起來並不仍然激活(仍生成ArrayList-s)。
什麼是烏拉圭回合目前的ArrayList的類型? – Salman
@Salman只是'ArrayList'。我只在運行時看到它。 – Dims
不幸的是,你不能在Gson中重寫'java.lang.Object'的反序列化。 –