public static function create($brokerPropertiesJson)
    {
        Validate::isString($brokerPropertiesJson, 'brokerPropertiesJson');

        $brokerProperties = new self();

        $brokerPropertiesArray = (array) json_decode($brokerPropertiesJson);

        if (array_key_exists('CorrelationId', $brokerPropertiesArray)) {
            $brokerProperties->setCorrelationId(
                $brokerPropertiesArray['CorrelationId']
            );
        }

        if (array_key_exists('SessionId', $brokerPropertiesArray)) {
            $brokerProperties->setSessionId(
                $brokerPropertiesArray['SessionId']
            );
        }

        if (array_key_exists('DeliveryCount', $brokerPropertiesArray)) {
            $brokerProperties->setDeliveryCount(
                $brokerPropertiesArray['DeliveryCount']
            );
        }

        if (array_key_exists('LockedUntilUtc', $brokerPropertiesArray)) {
            $brokerProperties->setLockedUntilUtc(
                \DateTime::createFromFormat(
                    Resources::AZURE_DATE_FORMAT,
                    $brokerPropertiesArray['LockedUntilUtc']
                )
            );
        }

        if (array_key_exists('LockToken', $brokerPropertiesArray)) {
            $brokerProperties->setLockToken(
                $brokerPropertiesArray['LockToken']
            );
        }

        if (array_key_exists('MessageId', $brokerPropertiesArray)) {
            $brokerProperties->setMessageId(
                $brokerPropertiesArray['MessageId']
            );
        }

        if (array_key_exists('Label', $brokerPropertiesArray)) {
            $brokerProperties->setLabel($brokerPropertiesArray['Label']);
        }

        if (array_key_exists('ReplyTo', $brokerPropertiesArray)) {
            $brokerProperties->setReplyTo($brokerPropertiesArray['ReplyTo']);
        }

        if (array_key_exists('SequenceNumber', $brokerPropertiesArray)) {
            $brokerProperties->setSequenceNumber(
                $brokerPropertiesArray['SequenceNumber']
            );
        }

        if (array_key_exists('TimeToLive', $brokerPropertiesArray)) {
            $brokerProperties->setTimeToLive(
                doubleval($brokerPropertiesArray['TimeToLive'])
            );
        }

        if (array_key_exists('To', $brokerPropertiesArray)) {
            $brokerProperties->setTo($brokerPropertiesArray['To']);
        }

        if (array_key_exists(
            'ScheduledEnqueueTimeUtc',
            $brokerPropertiesArray
        )
        ) {
            $brokerProperties->setScheduledEnqueueTimeUtc(
                \DateTime::createFromFormat(
                    Resources::AZURE_DATE_FORMAT,
                    $brokerPropertiesArray['ScheduledEnqueueTimeUtc']
                )
            );
        }

        if (array_key_exists('ReplyToSessionId', $brokerPropertiesArray)) {
            $brokerProperties->setReplyToSessionId(
                $brokerPropertiesArray['ReplyToSessionId']
            );
        }

        if (array_key_exists('MessageLocation', $brokerPropertiesArray)) {
            $brokerProperties->setMessageLocation(
                $brokerPropertiesArray['MessageLocation']
            );
        }

        if (array_key_exists('LockLocation', $brokerPropertiesArray)) {
            $brokerProperties->setLockLocation(
                $brokerPropertiesArray['LockLocation']
            );
        }

        return $brokerProperties;
    }