public function GetVDataArray
	(
		$nErrorId,
		$sErrorDesc	= '',
		$arrVData	= [],
		$sVersion	= '1.0',
		$bCached	= null,
		$arrExtra	= []
	)
	{
		//
		//	nErrorId	- [in] int		error id
		//	sErrorDesc	- [in/opt] string	error description
		//	arrVData	- [in/opt] array/object	virtual data
		//	sVersion	- [in/opt] string	service version, default is '1.0'
		//	bCached		- [in/opt] bool		if the data come from cache
		//	arrExtra	- [in/opt] array	extra data by key-value pairs
		//	RETURN		- json array
		//
		$arrHeader	= [];
		$arrRet		= [];

		if ( is_numeric( $nErrorId ) )
		{
			//	Okay
			$nErrorId	= intval( $nErrorId );
			$sErrorDesc	= ( ( is_string( $sErrorDesc ) || is_numeric( $sErrorDesc ) ) ? strval( $sErrorDesc ) : '' );
			$arrRet =
				[
					'errorid'   => $nErrorId,
					'errordesc' => $sErrorDesc,
					'vdata'     => ( ( is_array( $arrVData ) || is_object( $arrVData ) ) ? $arrVData : [] ),
				];
		}
		else
		{
			//	invalid
			$arrRet = $this->GetDefaultVDataJson();
		}

		//
		//	tell the world/client, we are version x.x.x via:
		//	2, version node of vdata
		//
		$arrRet[ 'version' ] = ( is_string( $sVersion ) && strlen( $sVersion ) > 0 ) ? $sVersion : self::SERVICE_DEFAULT_VERSION;

		//
		//	data from cache?
		//
		if ( is_bool( $bCached ) )
		{
			$arrRet['cache'] = intval( $bCached ? 1 : 0 );
		}

		//
		//	extra data
		//
		if ( CLib::IsArrayWithKeys( $arrExtra ) )
		{
			foreach ( $arrExtra as $sKey => $vValue )
			{
				if ( CLib::IsExistingString( $sKey, true ) )
				{
					//	trim and lower case
					$sKey	= strtolower( trim( $sKey ) );

					//	append the valid item to return array
					if ( ! $this->IsReservedKey( $sKey ) &&
						! array_key_exists( $sKey, $arrRet ) )
					{
						$arrRet[ $sKey ] = $vValue;
					}
				}
			}
		}

		//
		//	set header
		//
		if ( CLib::IsExistingString( $this->m_sServiceName, true ) ||
			CLib::IsExistingString( $this->m_sServiceUrl, true ) )
		{
			//
			//	append name and url to
			//	the beginning of return array
			//
			$arrRet = array_merge
			(
				[
					'name'	=> $this->m_sServiceName,
					'url'	=> $this->m_sServiceUrl,
				],
				$arrRet
			);
		}

		return $arrRet;
	}