public function __setSerialisablePropertyMap($propertyMap, $ignoreNoneWritableProperties = false) {
        $propertyAccessors = $this->__findSerialisablePropertyAccessors();

        $noneWritables = array();
        foreach ($propertyMap as $inputPropertyName => $propertyValue) {
            $propertyName = strtolower($inputPropertyName);

            // If we get a match, call the appropriate function
            if (isset ($propertyAccessors [$propertyName]) && isset ($propertyAccessors [$propertyName] ["set"])) {
                $accessor = $propertyAccessors [$propertyName] ["set"];
                if ($accessor instanceof \ReflectionMethod) {
                    if ($accessor->isPublic())
                        $accessor->invoke($this, $propertyValue);
                    else if ($accessor->isProtected()) {
                        $methodName = "set" . $propertyName;
                        $this->$methodName ($propertyValue);
                    } else {
                        if (!$ignoreNoneWritableProperties)
                            throw new PropertyNotWritableException (get_class($this), $propertyName);
                    }
                } else if ($accessor instanceof \ReflectionProperty) {
                    if ($accessor->isPublic())
                        $accessor->setValue($this, $propertyValue);
                    else if ($accessor->isProtected()) {
                        $propertyName = $accessor->getName();
                        $this->$propertyName = $propertyValue;
                    } else {
                        if (!$ignoreNoneWritableProperties)
                            throw new PropertyNotWritableException (get_class($this), $propertyName);
                    }
                }
            } else {
                // If none writable properties ignored, instead add them to an array for return for processing
                // higher if required, else throw exceptions.
                if ($ignoreNoneWritableProperties) {
                    $noneWritables [$inputPropertyName] = $propertyValue;
                } else {
                    throw new PropertyNotWritableException (get_class($this), $propertyName);
                }
            }

        }

        return $noneWritables;
    }