【发布时间】:2017-10-31 10:18:15
【问题描述】:
我尝试使用
.fromJson(mystring, Object.class);
但是得到了嵌套的 ArrayList-s。
我想嵌套double[][]...[]
这可能吗?
更新
我编写了以下自定义适配器
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 只是
ArrayList。我只在运行时看到它。 -
很遗憾,您不能在 Gson 中覆盖
java.lang.Object反序列化。
标签: java multidimensional-array gson