我试图制作一个JSONArray反序列化器,但是每当要反序列化的输入对象为Array类型时,我都无法弄清楚如何以JSONArray的大小重新分配和设置新的Array。
我已经尝试过:
Object[] arr = new Object[size()];
for (int i = 0; i < size(); i++) arr[i] = myArrayList.get(i);
deserializedObject = arr;
我认为错误可能是我试图将Object []分配给int [],所以我将代码更改为并尝试了:
if (deserializedObject instanceof int[])
{
int[] arr = new int[size()];
for (int i = 0; i < size(); i++)
{
Object obj = myArrayList.get(i);
if (!(obj instanceof Number))
throw new RuntimeException("Tried to deserialize element of type: " + obj.getClass().getName() + " into an Int Array");
int numb = ((Number)obj).intValue();
arr[i] = numb;
}
deserializedObject = arr;
}
现在我认为这是不可能的...
/**
* @param deserializedObject An object to deserialize into from this JsonArray
*/
public void deserialize (Object deserializedObject)
{
Class<? extends Object> objectClass = deserializedObject.getClass();
if (objectClass.isArray())
{
Object[] arr = new Object[size()];
for (int i = 0; i < size(); i++) arr[i] = myArrayList.get(i);
deserializedObject = arr;
}
else if (deserializedObject instanceof Collection)
{
Collection<Object> collection = (Collection<Object>) deserializedObject;
collection.clear();
for (Object o : myArrayList) collection.add(o);
}
else
throw new RuntimeException("Cannot deserialize to object: " + objectClass.getName() + " it is not an Array");
}
此功能的预期结果是JSONArray中的所有元素都将存储在deserializedObject参数中。 尽管输出是预定义的空数组