All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.ltsopensource.json.deserializer.ArrayDeserializer Maven / Gradle / Ivy

package com.github.ltsopensource.json.deserializer;

import com.github.ltsopensource.json.JSONArray;
import com.github.ltsopensource.json.JSONParser;

import java.lang.reflect.Array;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;

/**
 * @author Robert HG ([email protected]) on 12/30/15.
 */
public class ArrayDeserializer implements Deserializer {

    public static final ArrayDeserializer INSTANCE = new ArrayDeserializer();

    @SuppressWarnings({"unchecked", "rawtypes"})
    public  T deserialize(Object object, Type type) {

        JSONArray jsonArray;
        if (object instanceof JSONArray) {
            jsonArray = (JSONArray) object;
        } else {
            jsonArray = new JSONArray(object);
        }

        Class componentClass = null;
        Type componentType = null;
        if (type instanceof GenericArrayType) {
            componentType = ((GenericArrayType) type).getGenericComponentType();
            if (componentType instanceof TypeVariable) {
                TypeVariable componentVar = (TypeVariable) componentType;
                componentType = componentVar.getBounds()[0];
            }
            if (componentType instanceof Class) {
                componentClass = (Class) componentType;
            }
        } else {
            Class clazz = (Class) type;
            componentType = componentClass = clazz.getComponentType();
        }

        int size = jsonArray.size();
        Object array = Array.newInstance(componentClass, size);

        for (int i = 0; i < size; i++) {
            Object value = jsonArray.get(i);

            Deserializer deserializer = JSONParser.getDeserializer(componentClass);
            Array.set(array, i, deserializer.deserialize(value, componentType));
        }

        return (T) array;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy