private Object deserializeArray(NSObject payload, Class<?> clazz) { Class<?> elementClass = getClassForName(clazz.getComponentType().getName()); if (payload instanceof NSArray) { NSObject[] array = ((NSArray) payload).getArray(); Object result = Array.newInstance(elementClass, array.length); for (int i = 0; i < array.length; i++) { Array.set(result, i, this.toJavaObject(array[i], elementClass, null)); } return result; } if (payload instanceof NSSet) { Set<NSObject> set = ((NSSet) payload).getSet(); Object result = Array.newInstance(elementClass, set.size()); int i = 0; for (NSObject aSet : set) { Array.set(result, i, this.toJavaObject(aSet, elementClass, null)); i++; } return result; } if (payload instanceof NSData) { return deserializeData((NSData) payload, elementClass); } throw new IllegalArgumentException("Unable to map " + payload.getClass().getSimpleName() + " to " + clazz.getName()); }