private static function arrayizor($anObject, $depth, $whitelist = [], $blacklist = [])
    {
        // Determine the next depth to use
        $nextDepth = $depth - 1;

        // Lets get our Class Name
        // @TODO: Making some assumptions that only objects get passed in, need error checking
        $clazzName = get_class($anObject);

        // Now get our reflection class for this class name
        $reflectionClass = new ReflectionClass($anObject);

        // Then grap the class properites
        $clazzProps = $reflectionClass->getProperties();

        if (is_a($anObject, 'Doctrine\ORM\Proxy\Proxy')) {
            $parent = $reflectionClass->getParentClass();
            $clazzName = $parent->getName();
            $clazzProps = $parent->getProperties();
        }
        // A new array to hold things for us
        $anArray = [];

        // Lets loop through those class properties now
        foreach ($clazzProps as $prop) {

            // If a Whitelist exists
            if (@count($whitelist[$clazzName]) > 0) {
                // And this class property is not in it
                if (!@in_array($prop->name, $whitelist[$clazzName])) {
                    // lets skip it.
                    continue;
                }
                // Otherwise, if a blacklist exists
            } elseif (@count($blacklist[$clazzName] > 0)) {
                // And this class property is in it
                if (@in_array($prop->name, $blacklist[$clazzName])) {
                    // lets skip it.
                    continue;
                }
            }

            // We know the property, lets craft a getProperty method
            $method_name = 'get' . ucfirst($prop->name);
            // And check to see that it exists for this object
            if (method_exists($anObject, $method_name)) {
                // It did, so lets call it!
                $aValue = $anObject->$method_name();
            } else {
                $prop->setAccessible(true);
                $aValue = $prop->getValue($anObject);
            }

            // If it is a datetime, lets make it a string
            if ($aValue instanceof DateTime) {
                $anArray[$prop->name] = $aValue->format('Y-m-d H:i:s');

                continue;
            }

            // recursion
            if (is_object($aValue) || is_array($aValue)) {
                $anArray[$prop->name] = Serializor::toArray($aValue, $nextDepth, $whitelist, $blacklist);

                continue;
            }

            $anArray[$prop->name] = $aValue;
        }
        // All done, send it back!
        return $anArray;
    }